From 21a793801ddbf6967871b8208c4447b7d57c26d4 Mon Sep 17 00:00:00 2001 From: Skybot437 Date: Tue, 30 Jun 2026 18:24:45 -0700 Subject: [PATCH 1/4] Initial commit; Started implementing AbstractSpectrobesRangedWeapon and AbstractEnergyBoltEntity (Does not fire / renders as missing texture block rn) --- .../client/entity/attacks/AttackEntities.java | 12 +- .../entity/attacks/AttackRendererManager.java | 2 + .../model/BasicBlasterEnergyBoltModel.java | 28 ++++ .../BasicBlasterEnergyBoltRenderer.java | 22 +++ .../model/WeaponBasicBlasterItemModel.java | 24 +++ .../WeaponBasicBlasterItemRenderer.java | 15 ++ .../attacks/AbstractEnergyBoltEntity.java | 112 ++++++++++++++ .../attacks/BasicBlasterEnergyBoltEntity.java | 14 ++ .../AbstractSpectrobesRangedWeapon.java | 142 ++++++++++++++++++ .../items/weapons/BasicBlasterItem.java | 3 +- .../items/weapons/WeaponBasicBlasterItem.java | 47 ++++++ .../items/SpectrobesToolsRegistry.java | 12 +- 12 files changed, 423 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/model/BasicBlasterEnergyBoltModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/BasicBlasterEnergyBoltRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterItemRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java index 93c6e145..43b5834c 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java @@ -1,6 +1,7 @@ package com.spectrobes.spectrobesmod.client.entity.attacks; import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.entities.attacks.BasicBlasterEnergyBoltEntity; import com.spectrobes.spectrobesmod.common.entities.attacks.EnergyBoltEntity; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -10,6 +11,8 @@ import java.util.function.Supplier; + + public class AttackEntities { public static final DeferredRegister> ENTITY_TYPES = DeferredRegister.create(Registries.ENTITY_TYPE, SpectrobesInfo.MOD_ID); @@ -17,7 +20,14 @@ public class AttackEntities { public static final Supplier> ENTITY_ENERGY_BOLT = ENTITY_TYPES.register("entity_energy_bolt", () -> EntityType.Builder.of(EnergyBoltEntity::new, - MobCategory.MISC) + MobCategory.MISC) .sized(1f, 1f) .build(ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "energy_bolt").toString())); + + public static final Supplier> ENTITY_PROJECTILE_BASIC_BLASTER + = ENTITY_TYPES.register("entity_basic_blaster_shot", + () -> EntityType.Builder.of(BasicBlasterEnergyBoltEntity::new, + MobCategory.MISC) + .sized(1f, 1f) + .build(ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "basic_blaster_shot").toString())); } diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java index b564bea3..a7210fc2 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java @@ -1,6 +1,7 @@ package com.spectrobes.spectrobesmod.client.entity.attacks; import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.client.entity.attacks.renderer.BasicBlasterEnergyBoltRenderer; import com.spectrobes.spectrobesmod.client.entity.attacks.renderer.EnergyBoltRenderer; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; @@ -12,6 +13,7 @@ public class AttackRendererManager { @SubscribeEvent public static void registerEntityRenderers(EntityRenderersEvent.RegisterRenderers event) { event.registerEntityRenderer(AttackEntities.ENTITY_ENERGY_BOLT.get(), manager -> new EnergyBoltRenderer(manager)); + event.registerEntityRenderer(AttackEntities.ENTITY_PROJECTILE_BASIC_BLASTER.get(), BasicBlasterEnergyBoltRenderer::new); } } diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/model/BasicBlasterEnergyBoltModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/model/BasicBlasterEnergyBoltModel.java new file mode 100644 index 00000000..f96fa1f4 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/model/BasicBlasterEnergyBoltModel.java @@ -0,0 +1,28 @@ +package com.spectrobes.spectrobesmod.client.entity.attacks.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.entities.attacks.BasicBlasterEnergyBoltEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +// TODO: This is essentially a duplicate of EnergyBoltModel. Make have different ResourceLocations. +public class BasicBlasterEnergyBoltModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(BasicBlasterEnergyBoltEntity object) + { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/energy_bolt.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(BasicBlasterEnergyBoltEntity object) + { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/attack/energy_bolt.png"); + } + + @Override + public ResourceLocation getAnimationResource(BasicBlasterEnergyBoltEntity object) + { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "animations/krawl/gris.json"); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/BasicBlasterEnergyBoltRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/BasicBlasterEnergyBoltRenderer.java new file mode 100644 index 00000000..f5a4ad4a --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/BasicBlasterEnergyBoltRenderer.java @@ -0,0 +1,22 @@ +package com.spectrobes.spectrobesmod.client.entity.attacks.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.spectrobes.spectrobesmod.client.entity.attacks.model.BasicBlasterEnergyBoltModel; +import com.spectrobes.spectrobesmod.common.entities.attacks.BasicBlasterEnergyBoltEntity; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +// TODO: This is essentially a duplicate of EnergyBoltRenderer. Make have different ResourceLocations. +public class BasicBlasterEnergyBoltRenderer extends GeoEntityRenderer { + + public BasicBlasterEnergyBoltRenderer(EntityRendererProvider.Context renderManagerIn) { + super(renderManagerIn, new BasicBlasterEnergyBoltModel()); + } + + @Override + public void render(BasicBlasterEnergyBoltEntity animatable, float yaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + poseStack.scale(4,4,4); + super.render(animatable, yaw, partialTick, poseStack, bufferSource, packedLight); + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java new file mode 100644 index 00000000..1adfdb0f --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java @@ -0,0 +1,24 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponBasicBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponBasicBlasterItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponBasicBlasterItem aoiFossilItem) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/basic_blaster.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponBasicBlasterItem aoiFossilItem) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_basic.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponBasicBlasterItem aoiFossilItem) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterItemRenderer.java new file mode 100644 index 00000000..e2e55583 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterItemRenderer.java @@ -0,0 +1,15 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponBasicBlasterItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponBasicBlasterItem; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +@OnlyIn(Dist.CLIENT) +public class WeaponBasicBlasterItemRenderer extends GeoItemRenderer { + + public WeaponBasicBlasterItemRenderer() { + super(new WeaponBasicBlasterItemModel()); + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java new file mode 100644 index 00000000..149f5f94 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java @@ -0,0 +1,112 @@ +package com.spectrobes.spectrobesmod.common.entities.attacks; + +import com.spectrobes.spectrobesmod.common.entities.IHasNature; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.projectile.AbstractHurtingProjectile; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.HitResult; +import org.jetbrains.annotations.NotNull; +import software.bernie.geckolib.animatable.GeoAnimatable; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.util.GeckoLibUtil; + +public abstract class AbstractEnergyBoltEntity extends AbstractHurtingProjectile implements IHasNature, GeoAnimatable { + private int AtkDamage; + private SpectrobeProperties.Nature Nature; + + public AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); + protected int lifetime = 0; + protected int maxLifetime = 100; // Default (Plz set in constructor of child classes) + + protected AbstractEnergyBoltEntity(EntityType pEntityType, Level pLevel) { + super(pEntityType, pLevel); + } + + // = = = MORE SPECTROBY PROJECTILE = = = + @Override protected boolean shouldBurn() { return false; } + + // TODO: Find / Make a more appropriate particle + @Override @NotNull protected ParticleOptions getTrailParticle() { return ParticleTypes.GLOW; } + + // = = = GET / SET = = = + // AtkDamage + public int getAtkDamage() { return this.AtkDamage; } + public void setAtkDamage(int pValue) { this.AtkDamage = pValue; } + + // Nature + @Override public SpectrobeProperties.Nature getNature() { return Nature; } // Mandatory + public void setNature(SpectrobeProperties.Nature pValue) { this.Nature = pValue; } + + // lifetime + public int getLifetime() { return this.maxLifetime; } +// public void setLifetime(int pValue) { this.maxLifetime = pValue; } // Probably shouldn't allow setting the timer as it ticks + + public int getMaxLifetime() { return this.maxLifetime; } + public void setMaxLifetime(int pValue) { this.maxLifetime = pValue; } + + // = = = TICKS = = = + @Override + public void tick() { + super.tick(); + tickDespawn(); + } + + /** Manages the projectile's lifetime. */ + protected void tickDespawn() { + ++this.lifetime; + if (this.lifetime >= this.maxLifetime) { + this.remove(RemovalReason.DISCARDED); + this.onDeath(); + } + } + + // = = = OTHER, MANDATORY METHODS = = = + + @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { } + @Override public AnimatableInstanceCache getAnimatableInstanceCache() { + return cache; + } + @Override public double getTick(Object object) { return 0; } + + // = = = SYNCED DATA = = = + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { } + + // = = = EVENTS = = = + @Override + protected void onHit(HitResult pResult) { + super.onHit(pResult); // <-- Calls both onHitEntity & onHitBlock + + // So everything down here happens after the projectile hits ANYTHING + this.remove(RemovalReason.DISCARDED); + this.onDeath(); + } + + @Override + protected void onHitEntity(EntityHitResult pResult) { + super.onHitEntity(pResult); + pResult.getEntity().hurt( + this.level().damageSources().thrown(this, this.getOwner()), + AtkDamage + ); + } + + /** Things that happen any time this entity dies. */ + protected void onDeath() { + // Remove + // TODO: Don't know if this should go here. Figure out what the individual RemovalReasons are used for. + // this.remove(RemovalReason.DISCARDED); + + // Spawn death particles + // TODO: Figure out particles + + // Play death noise + this.playSound(SoundEvents.FIRE_EXTINGUISH); + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java new file mode 100644 index 00000000..00d859c9 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java @@ -0,0 +1,14 @@ +package com.spectrobes.spectrobesmod.common.entities.attacks; + +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; + +/** An entity for the basic blaster energy bolt. */ +public class BasicBlasterEnergyBoltEntity extends AbstractEnergyBoltEntity { + + + public BasicBlasterEnergyBoltEntity(EntityType pEntityType, Level pLevel) { + super(pEntityType, pLevel); + this.maxLifetime = 120; // <-- Define how long it takes this projectile to expire like this + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java new file mode 100644 index 00000000..aefcd0ee --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java @@ -0,0 +1,142 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.entity.attacks.AttackEntities; +import com.spectrobes.spectrobesmod.common.entities.attacks.BasicBlasterEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.network.chat.Component; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoItem; +import software.bernie.geckolib.animatable.SingletonGeoAnimatable; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.List; +import java.util.Random; + +import static net.neoforged.neoforge.event.EventHooks.onArrowLoose; + +public abstract class AbstractSpectrobesRangedWeapon extends Item implements GeoItem, ISpectrobeWeapon { + + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); + + protected float projectileSpeed = 0.5F; + + public AbstractSpectrobesRangedWeapon(Properties pProperties) { + super(pProperties); + SingletonGeoAnimatable.registerSyncedAnimatable(this); + } + + @Override + public void releaseUsing(ItemStack pStack, Level pLevel, LivingEntity pEntityLiving, int pTimeLeft) { + if (pEntityLiving instanceof Player playerentity) { + + int i = this.getUseDuration(pStack, playerentity) - pTimeLeft; + i = onArrowLoose(pStack, pLevel, playerentity, i, true); + if (i < 0) return; + +// float f = getPowerForTime(i); // BowItem +// if (!((double)f < 0.1D)) { + if (!((double)projectileSpeed < 0.1D)) { + // V1 - OG +// EnergyBoltEntity abstractarrowentity = new EnergyBoltEntity(AttackEntities.ENTITY_ENERGY_BOLT.get(), pLevel); + + // V2 - BasicBlasterEnergyBoltEntity + BasicBlasterEnergyBoltEntity abstractarrowentity = new BasicBlasterEnergyBoltEntity(AttackEntities.ENTITY_PROJECTILE_BASIC_BLASTER.get(), pLevel); + + abstractarrowentity.setOwner(playerentity); + +// // V1 - OG +// abstractarrowentity.AtkDamage = GetWeaponStats().AtkDamage; +// abstractarrowentity.Nature = GetWeaponStats().Nature; + + // V2 - BasicBlasterEnergyBoltEntity + abstractarrowentity.setAtkDamage(GetWeaponStats().AtkDamage); + abstractarrowentity.setNature(GetWeaponStats().Nature); + + abstractarrowentity.setPos(playerentity.getX(), playerentity.getY() + 1.5, playerentity.getZ()); + +// // V1 - OG +// abstractarrowentity.shootFromRotation(playerentity, playerentity.xRotO, playerentity.yRotO, 0.0F, f, 1.0F); + + // V2 - BasicBlasterEnergyBoltEntity + Vec3 look = pEntityLiving.getLookAngle(); + abstractarrowentity.shootFromRotation(playerentity, (float) look.x, (float) look.y, (float) look.z, projectileSpeed, 1.0F); + + pLevel.addFreshEntity(abstractarrowentity); + + pLevel.playSound(null, playerentity.getX(), playerentity.getY(), playerentity.getZ(), SoundEvents.ARROW_SHOOT, SoundSource.PLAYERS, 1.0F, 1.0F / (new Random().nextFloat() * 0.4F + 1.2F) + projectileSpeed * 0.5F); + playerentity.awardStat(Stats.ITEM_USED.get(this)); + } + } + } + + @Override + public void appendHoverText(ItemStack pStack, Item.TooltipContext context, List pTooltip, TooltipFlag pFlag) { + super.appendHoverText(pStack, context, pTooltip, pFlag); + pTooltip.add(Component.literal("Weapon Tier: " + GetWeaponStats().Tier)); + pTooltip.add(Component.literal("Attack Stat: " + GetWeaponStats().AtkDamage)); + pTooltip.add(Component.literal("Weapon Speed: " + GetWeaponStats().Speed)); + } + + + // = = = FROM BOW ITEM = = = +// @Override +// public Predicate getAllSupportedProjectiles() { +// return stack -> false; +// } +// +// @Override +// public int getDefaultProjectileRange() { +// return GetWeaponStats().Tier * 7; +// } + + // = = = OTHER, MANDATORY METHODS = = = + @Override + public abstract void registerControllers(AnimatableManager.ControllerRegistrar controllers); +// @Override public AnimationFactory getFactory() { +// return this.factory; +// } +// +// public

PlayState predicate(AnimationEvent

event) { +// return event.isMoving() ? PlayState.CONTINUE : PlayState.STOP; +// } + + public abstract WeaponStats GetWeaponStats(); + + @Override + public UseAnim getUseAnimation(ItemStack pStack) { + return UseAnim.BOW; + } + +// @Override +// public void onAnimationSync(int id, int state) { +// if (state == ANIM_OPEN) { +// final AnimationController controller = GeckoLibUtil.getControllerForID(this.factory, id, getControllerName()); +// if (controller.getAnimationState() == AnimationState.Stopped) { +// runAnimation(controller); +// } +// } +// } +// +// private void runAnimation(AnimationController controller) { +// controller.markNeedsReload(); +// } + + public abstract String getControllerName(); + + public SpectrobeProperties.Nature getNature() { + return GetWeaponStats().Nature; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicBlasterItem.java index 7deccdab..f28dd98b 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicBlasterItem.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicBlasterItem.java @@ -1,7 +1,6 @@ package com.spectrobes.spectrobesmod.common.items.weapons; import com.spectrobes.spectrobesmod.client.items.weapons.renderer.BasicBlasterItemRenderer; -import com.spectrobes.spectrobesmod.client.items.weapons.renderer.BasicGloveItemRenderer; import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; import com.spectrobes.spectrobesmod.util.WeaponStats; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; @@ -47,4 +46,4 @@ public WeaponStats GetWeaponStats() { public String getControllerName() { return "basic_blaster"; } -} +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java new file mode 100644 index 00000000..198e76aa --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java @@ -0,0 +1,47 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterItemRenderer; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; + +import java.util.function.Consumer; + +public class WeaponBasicBlasterItem extends AbstractSpectrobesRangedWeapon { + public WeaponBasicBlasterItem(Properties pProperties) { + super(pProperties); + } + + @Override + public WeaponStats GetWeaponStats() { + return new WeaponStats(20, 1, 1, true, false, SpectrobeProperties.Nature.OTHER); + } + + @Override + public String getControllerName() { + return "basic_blaster"; + } + + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponBasicBlasterItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new WeaponBasicBlasterItemRenderer(); + } + + return this.renderer; + } + }); + } + + // = = = MANDATORY = = = + @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { } + @Override public AnimatableInstanceCache getAnimatableInstanceCache() { return null; } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java b/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java index 374a30c3..addb1fb9 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java @@ -1,19 +1,12 @@ package com.spectrobes.spectrobesmod.common.registry.items; import com.spectrobes.spectrobesmod.SpectrobesInfo; -import com.spectrobes.spectrobesmod.client.items.healing.renderer.AntidoteItemRenderer; -import com.spectrobes.spectrobesmod.client.items.healing.renderer.SerumItemRenderer; -import com.spectrobes.spectrobesmod.client.items.weapons.renderer.BasicBlasterItemRenderer; import com.spectrobes.spectrobesmod.common.items.tools.PrizmodItem; import com.spectrobes.spectrobesmod.common.items.tools.healing.SpectrobeAntidoteHealingItem; import com.spectrobes.spectrobesmod.common.items.tools.healing.SpectrobeSerumHealingItem; import com.spectrobes.spectrobesmod.common.items.weapons.*; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.Item; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; -import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; import net.neoforged.neoforge.registries.DeferredRegister; import java.util.function.Supplier; @@ -46,4 +39,9 @@ public class SpectrobesToolsRegistry { ITEMS.register("basic_antidote", () -> new SpectrobeAntidoteHealingItem(50, 2000, 1, new Item.Properties())); + + // = = = TESTING = = = + public static final Supplier weapon_basic_blaster_item = + ITEMS.register("weapon_basic_blaster_item", + () -> new WeaponBasicBlasterItem(new Item.Properties())); } From 6550aef2b3bb44cd9d6a5d8df8215acd040b1a7b Mon Sep 17 00:00:00 2001 From: Skybot437 Date: Fri, 10 Jul 2026 12:42:48 -0700 Subject: [PATCH 2/4] WeaponBasicBlasterItem now fires BasicBlasterEnergyBoltEntity upon releasing trigger (still does not render for some reason tho); BasicBlasterEnergyBoltEntity flies straight, renders, and has trail --- .../client/entity/attacks/AttackEntities.java | 3 +- .../entity/attacks/AttackRendererManager.java | 3 +- .../model/WeaponBasicBlasterItemModel.java | 3 +- .../WeaponBasicBlasterItemRenderer.java | 5 +- .../attacks/AbstractEnergyBoltEntity.java | 3 + .../attacks/BasicBlasterEnergyBoltEntity.java | 6 +- .../AbstractSpectrobesRangedWeapon.java | 143 +++--- .../items/weapons/WeaponBasicBlasterItem.java | 23 +- .../items/SpectrobesToolsRegistry.java | 2 +- .../geo/weapons/weapon_basic_blaster.geo.json | 423 ++++++++++++++++++ .../assets/spectrobesmod/lang/en_us.json | 1 + 11 files changed, 501 insertions(+), 114 deletions(-) create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_basic_blaster.geo.json diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java index 43b5834c..09e3e4e7 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java @@ -26,8 +26,7 @@ public class AttackEntities { public static final Supplier> ENTITY_PROJECTILE_BASIC_BLASTER = ENTITY_TYPES.register("entity_basic_blaster_shot", - () -> EntityType.Builder.of(BasicBlasterEnergyBoltEntity::new, - MobCategory.MISC) + () -> EntityType.Builder.of(BasicBlasterEnergyBoltEntity::new, MobCategory.MISC) .sized(1f, 1f) .build(ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "basic_blaster_shot").toString())); } diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java index a7210fc2..ad7d3019 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java @@ -13,7 +13,6 @@ public class AttackRendererManager { @SubscribeEvent public static void registerEntityRenderers(EntityRenderersEvent.RegisterRenderers event) { event.registerEntityRenderer(AttackEntities.ENTITY_ENERGY_BOLT.get(), manager -> new EnergyBoltRenderer(manager)); - event.registerEntityRenderer(AttackEntities.ENTITY_PROJECTILE_BASIC_BLASTER.get(), BasicBlasterEnergyBoltRenderer::new); - + event.registerEntityRenderer(AttackEntities.ENTITY_PROJECTILE_BASIC_BLASTER.get(), manager -> new BasicBlasterEnergyBoltRenderer(manager)); } } diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java index 1adfdb0f..60d6a54c 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java @@ -9,7 +9,8 @@ public class WeaponBasicBlasterItemModel extends GeoModel { - public WeaponBasicBlasterItemRenderer() { super(new WeaponBasicBlasterItemModel()); + System.out.println("WeaponBasicBlasterItemRenderer created"); } } diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java index 149f5f94..f28bfc8b 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java @@ -17,6 +17,9 @@ import software.bernie.geckolib.animation.AnimatableManager; import software.bernie.geckolib.util.GeckoLibUtil; +// TODO: The projectile seems to fly the same speed regardless of what velocity it is shot at. +// May have to Override assignDirectionalMovement() to make the projectile travel at a constant speed? +// Idk how the acceleration math goes. public abstract class AbstractEnergyBoltEntity extends AbstractHurtingProjectile implements IHasNature, GeoAnimatable { private int AtkDamage; private SpectrobeProperties.Nature Nature; diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java index 00d859c9..3a096fbc 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java @@ -1,14 +1,16 @@ package com.spectrobes.spectrobesmod.common.entities.attacks; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.Level; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.util.GeckoLibUtil; /** An entity for the basic blaster energy bolt. */ public class BasicBlasterEnergyBoltEntity extends AbstractEnergyBoltEntity { - public BasicBlasterEnergyBoltEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); - this.maxLifetime = 120; // <-- Define how long it takes this projectile to expire like this + this.maxLifetime = 50; // <-- Define how long it takes this projectile to expire like this } } diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java index aefcd0ee..f9408201 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java @@ -2,86 +2,45 @@ import com.spectrobes.spectrobesmod.client.entity.attacks.AttackEntities; import com.spectrobes.spectrobesmod.common.entities.attacks.BasicBlasterEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.EnergyBoltEntity; import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; import com.spectrobes.spectrobesmod.util.WeaponStats; import net.minecraft.network.chat.Component; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.item.UseAnim; +import net.minecraft.world.item.*; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.event.EventHooks; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.SingletonGeoAnimatable; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.List; import java.util.Random; -import static net.neoforged.neoforge.event.EventHooks.onArrowLoose; +import static net.minecraft.world.item.BowItem.getPowerForTime; public abstract class AbstractSpectrobesRangedWeapon extends Item implements GeoItem, ISpectrobeWeapon { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - protected float projectileSpeed = 0.5F; + protected float projectileSpeed = 0.01F; public AbstractSpectrobesRangedWeapon(Properties pProperties) { super(pProperties); SingletonGeoAnimatable.registerSyncedAnimatable(this); } - @Override - public void releaseUsing(ItemStack pStack, Level pLevel, LivingEntity pEntityLiving, int pTimeLeft) { - if (pEntityLiving instanceof Player playerentity) { - - int i = this.getUseDuration(pStack, playerentity) - pTimeLeft; - i = onArrowLoose(pStack, pLevel, playerentity, i, true); - if (i < 0) return; - -// float f = getPowerForTime(i); // BowItem -// if (!((double)f < 0.1D)) { - if (!((double)projectileSpeed < 0.1D)) { - // V1 - OG -// EnergyBoltEntity abstractarrowentity = new EnergyBoltEntity(AttackEntities.ENTITY_ENERGY_BOLT.get(), pLevel); - - // V2 - BasicBlasterEnergyBoltEntity - BasicBlasterEnergyBoltEntity abstractarrowentity = new BasicBlasterEnergyBoltEntity(AttackEntities.ENTITY_PROJECTILE_BASIC_BLASTER.get(), pLevel); - - abstractarrowentity.setOwner(playerentity); - -// // V1 - OG -// abstractarrowentity.AtkDamage = GetWeaponStats().AtkDamage; -// abstractarrowentity.Nature = GetWeaponStats().Nature; - - // V2 - BasicBlasterEnergyBoltEntity - abstractarrowentity.setAtkDamage(GetWeaponStats().AtkDamage); - abstractarrowentity.setNature(GetWeaponStats().Nature); - - abstractarrowentity.setPos(playerentity.getX(), playerentity.getY() + 1.5, playerentity.getZ()); - -// // V1 - OG -// abstractarrowentity.shootFromRotation(playerentity, playerentity.xRotO, playerentity.yRotO, 0.0F, f, 1.0F); - - // V2 - BasicBlasterEnergyBoltEntity - Vec3 look = pEntityLiving.getLookAngle(); - abstractarrowentity.shootFromRotation(playerentity, (float) look.x, (float) look.y, (float) look.z, projectileSpeed, 1.0F); - - pLevel.addFreshEntity(abstractarrowentity); - - pLevel.playSound(null, playerentity.getX(), playerentity.getY(), playerentity.getZ(), SoundEvents.ARROW_SHOOT, SoundSource.PLAYERS, 1.0F, 1.0F / (new Random().nextFloat() * 0.4F + 1.2F) + projectileSpeed * 0.5F); - playerentity.awardStat(Stats.ITEM_USED.get(this)); - } - } - } - @Override public void appendHoverText(ItemStack pStack, Item.TooltipContext context, List pTooltip, TooltipFlag pFlag) { super.appendHoverText(pStack, context, pTooltip, pFlag); @@ -90,53 +49,57 @@ public void appendHoverText(ItemStack pStack, Item.TooltipContext context, List< pTooltip.add(Component.literal("Weapon Speed: " + GetWeaponStats().Speed)); } + /** Starts the "using" process. */ + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + player.startUsingItem(hand); + return InteractionResultHolder.consume(stack); + } - // = = = FROM BOW ITEM = = = -// @Override -// public Predicate getAllSupportedProjectiles() { -// return stack -> false; -// } -// -// @Override -// public int getDefaultProjectileRange() { -// return GetWeaponStats().Tier * 7; -// } + /** Determines how long before use is at max value. */ + @Override public int getUseDuration(ItemStack stack, LivingEntity entity) { return 72000; } - // = = = OTHER, MANDATORY METHODS = = = + /** Fires the blaster bolt. */ @Override - public abstract void registerControllers(AnimatableManager.ControllerRegistrar controllers); -// @Override public AnimationFactory getFactory() { -// return this.factory; -// } + public void releaseUsing(ItemStack pStack, Level pLevel, LivingEntity pEntityLiving, int pTimeLeft) { + if (!(pEntityLiving instanceof Player player)) return; + + // The power stuff could be cool, but like... Blasters don't have charge mechanics in Spectrobes. + // Just set speed and damage scaling off rallen's stats. + // Completely fine with re-enabling this if ppl want it tho. +// int charge = this.getUseDuration(pStack, player) - pTimeLeft; +// charge = EventHooks.onArrowLoose(pStack, pLevel, player, charge, true); +// if (charge < 0) return; // -// public

PlayState predicate(AnimationEvent

event) { -// return event.isMoving() ? PlayState.CONTINUE : PlayState.STOP; -// } - - public abstract WeaponStats GetWeaponStats(); +// float power = getPowerForTime(charge); // BowItem +// if ((double)power < 0.1D) return; // Speed determined by charge power +// if (projectileSpeed < 0.1D) return; // Set speed + if (!pLevel.isClientSide) { + BasicBlasterEnergyBoltEntity projectile = new BasicBlasterEnergyBoltEntity(AttackEntities.ENTITY_PROJECTILE_BASIC_BLASTER.get(), pLevel); + + projectile.setOwner(player); + projectile.setPos(player.getX(), player.getY() + 1.5D, player.getZ()); + projectile.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, projectileSpeed, 1.0F); + projectile.setAtkDamage(GetWeaponStats().AtkDamage); + projectile.setNature(GetWeaponStats().Nature); + + projectile.shootFromRotation(player, player.xRotO, player.yRotO, 0.0F, projectileSpeed, 1.0F); + pLevel.addFreshEntity(projectile); + } - @Override - public UseAnim getUseAnimation(ItemStack pStack) { - return UseAnim.BOW; + pLevel.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.ARROW_SHOOT, SoundSource.PLAYERS, 1.0F, 1.0F / (new Random().nextFloat() * 0.4F + 1.2F) + projectileSpeed * 0.5F); + player.awardStat(Stats.ITEM_USED.get(this)); } -// @Override -// public void onAnimationSync(int id, int state) { -// if (state == ANIM_OPEN) { -// final AnimationController controller = GeckoLibUtil.getControllerForID(this.factory, id, getControllerName()); -// if (controller.getAnimationState() == AnimationState.Stopped) { -// runAnimation(controller); -// } -// } -// } -// -// private void runAnimation(AnimationController controller) { -// controller.markNeedsReload(); -// } - + // = = = OTHER, MANDATORY METHODS = = = + @Override public abstract void registerControllers(AnimatableManager.ControllerRegistrar controllers); + @Override public AnimatableInstanceCache getAnimatableInstanceCache() { return this.cache; } + @Override public UseAnim getUseAnimation(ItemStack pStack) { return UseAnim.BOW; } + public abstract WeaponStats GetWeaponStats(); public abstract String getControllerName(); - - public SpectrobeProperties.Nature getNature() { - return GetWeaponStats().Nature; + public SpectrobeProperties.Nature getNature() { return GetWeaponStats().Nature; } + public PlayState predicate(AnimationState animationState) { + return animationState.isMoving() ? PlayState.CONTINUE : PlayState.STOP; } } diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java index 198e76aa..62ec5a15 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java @@ -1,30 +1,30 @@ package com.spectrobes.spectrobesmod.common.items.weapons; +import com.spectrobes.spectrobesmod.SpectrobesInfo; import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterItemRenderer; import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; import com.spectrobes.spectrobesmod.util.WeaponStats; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import software.bernie.geckolib.animatable.client.GeoRenderProvider; -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; import java.util.function.Consumer; public class WeaponBasicBlasterItem extends AbstractSpectrobesRangedWeapon { - public WeaponBasicBlasterItem(Properties pProperties) { - super(pProperties); - } + public WeaponBasicBlasterItem(Properties pProperties) { super(pProperties); } + // = = = STATS = = = @Override public WeaponStats GetWeaponStats() { return new WeaponStats(20, 1, 1, true, false, SpectrobeProperties.Nature.OTHER); } - @Override - public String getControllerName() { - return "basic_blaster"; + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_basic_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); } - @Override public void createGeoRenderer(Consumer consumer) { consumer.accept(new GeoRenderProvider() { @@ -32,6 +32,9 @@ public void createGeoRenderer(Consumer consumer) { @Override public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + System.out.println("Getting renderer"); +// SpectrobesInfo.LOGGER.info("Getting renderer"); + if (this.renderer == null) { this.renderer = new WeaponBasicBlasterItemRenderer(); } @@ -40,8 +43,4 @@ public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { } }); } - - // = = = MANDATORY = = = - @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { } - @Override public AnimatableInstanceCache getAnimatableInstanceCache() { return null; } } \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java b/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java index addb1fb9..f1b66a4f 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java @@ -41,7 +41,7 @@ public class SpectrobesToolsRegistry { new Item.Properties())); // = = = TESTING = = = - public static final Supplier weapon_basic_blaster_item = + public static final Supplier WEAPON_BASIC_BLASTER_ITEM = ITEMS.register("weapon_basic_blaster_item", () -> new WeaponBasicBlasterItem(new Item.Properties())); } diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_basic_blaster.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_basic_blaster.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_basic_blaster.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/lang/en_us.json b/src/main/resources/assets/spectrobesmod/lang/en_us.json index abb90390..32c9095c 100644 --- a/src/main/resources/assets/spectrobesmod/lang/en_us.json +++ b/src/main/resources/assets/spectrobesmod/lang/en_us.json @@ -42,6 +42,7 @@ "item.spectrobesmod.basic_sword_item": "Basic Sword", "item.spectrobesmod.basic_glove_item": "Basic Glove", "item.spectrobesmod.basic_blaster_item": "Basic Blaster", + "item.spectrobesmod.weapon_basic_blaster_item": "Testing New Basic Blaster", "item.spectrobesmod.basic_npp_helmet": "Basic NPP Helmet", "item.spectrobesmod.basic_npp_chestplate": "Basic NPP Chestplate", "item.spectrobesmod.basic_npp_leggings": "Basic NPP Leggings", From 7e58b6c2d94854438546b0d7518a848a54fded38 Mon Sep 17 00:00:00 2001 From: Skybot437 Date: Fri, 10 Jul 2026 16:44:17 -0700 Subject: [PATCH 3/4] Blasters now display properly (was missing model, cause of course); Changed WeaponStats to have an enum for weapon type instead of a boolean for each weapon type; Created placeholders for all S1 blasters; Implemented HomingEnergyBoltEntity; Created extra WeaponBasicBlasterCItem for possible future stuff (If want) --- .../client/entity/attacks/AttackEntities.java | 14 +- .../entity/attacks/AttackRendererManager.java | 5 +- .../model/BasicBlasterEnergyBoltModel.java | 12 +- ...erer.java => BasicEnergyBoltRenderer.java} | 12 +- .../model/WeaponBasicBlasterCItemModel.java | 25 ++ .../model/WeaponBasicBlasterItemModel.java | 7 +- .../model/WeaponDoubleBlasterItemModel.java | 25 ++ .../model/WeaponHomingBlasterItemModel.java | 24 + .../model/WeaponHyperBlasterItemModel.java | 24 + .../model/WeaponPhotonBlasterItemModel.java | 24 + .../model/WeaponRayBlasterItemModel.java | 25 ++ .../model/WeaponRuptureBlasterItemModel.java | 24 + .../model/WeaponShatterBlasterItemModel.java | 24 + .../model/WeaponTrackingBlasterItemModel.java | 24 + .../model/WeaponTripleBlasterItemModel.java | 25 ++ .../WeaponBasicBlasterCItemRenderer.java | 12 + .../WeaponBasicBlasterItemRenderer.java | 1 - .../WeaponDoubleBlasterItemRenderer.java | 13 + .../WeaponHomingBlasterItemRenderer.java | 9 + .../WeaponHyperBlasterItemRenderer.java | 11 + .../WeaponPhotonBlasterItemRenderer.java | 9 + .../WeaponRayBlasterItemRenderer.java | 11 + .../WeaponRuptureBlasterItemRenderer.java | 9 + .../WeaponShatterBlasterItemRenderer.java | 11 + .../WeaponTrackingBlasterItemRenderer.java | 9 + .../WeaponTripleBlasterItemRenderer.java | 9 + .../attacks/AbstractEnergyBoltEntity.java | 2 +- .../attacks/BasicBlasterEnergyBoltEntity.java | 16 - .../attacks/BasicEnergyBoltEntity.java | 13 + .../attacks/HomingEnergyBoltEntity.java | 72 +++ .../AbstractSpectrobesRangedWeapon.java | 50 ++- .../items/weapons/BasicBlasterItem.java | 2 +- .../common/items/weapons/BasicGloveItem.java | 2 +- .../common/items/weapons/BasicSwordItem.java | 2 +- .../weapons/WeaponBasicBlasterCItem.java | 45 ++ .../items/weapons/WeaponBasicBlasterItem.java | 5 +- .../weapons/WeaponDoubleBlasterItem.java | 43 ++ .../weapons/WeaponHomingBlasterItem.java | 51 +++ .../items/weapons/WeaponHyperBlasterItem.java | 43 ++ .../weapons/WeaponPhotonBlasterItem.java | 43 ++ .../items/weapons/WeaponRayBlasterItem.java | 43 ++ .../weapons/WeaponRuptureBlasterItem.java | 43 ++ .../weapons/WeaponShatterBlasterItem.java | 43 ++ .../weapons/WeaponTrackingBlasterItem.java | 52 +++ .../weapons/WeaponTripleBlasterItem.java | 43 ++ .../items/SpectrobesToolsRegistry.java | 32 ++ .../spectrobesmod/util/WeaponStats.java | 15 +- .../weapons/weapon_basic_blaster_c.geo.json | 423 ++++++++++++++++++ .../weapons/weapon_double_blaster.geo.json | 423 ++++++++++++++++++ .../weapons/weapon_homing_blaster.geo.json | 423 ++++++++++++++++++ .../geo/weapons/weapon_hyper_blaster.geo.json | 423 ++++++++++++++++++ .../weapons/weapon_photon_blaster.geo.json | 423 ++++++++++++++++++ .../geo/weapons/weapon_ray_blaster.geo.json | 423 ++++++++++++++++++ .../weapons/weapon_rupture_blaster.geo.json | 423 ++++++++++++++++++ .../weapons/weapon_shatter_blaster.geo.json | 423 ++++++++++++++++++ .../weapons/weapon_tracking_blaster.geo.json | 423 ++++++++++++++++++ .../weapons/weapon_triple_blaster.geo.json | 423 ++++++++++++++++++ .../item/weapon_basic_blaster_c_item.json | 104 +++++ .../item/weapon_basic_blaster_item.json | 104 +++++ .../item/weapon_double_blaster_item.json | 104 +++++ .../item/weapon_homing_blaster_item.json | 104 +++++ .../item/weapon_hyper_blaster_item.json | 104 +++++ .../item/weapon_photon_blaster_item.json | 104 +++++ .../models/item/weapon_ray_blaster_item.json | 104 +++++ .../item/weapon_rupture_blaster_item.json | 104 +++++ .../item/weapon_shatter_blaster_item.json | 104 +++++ .../item/weapon_tracking_blaster_item.json | 104 +++++ .../item/weapon_triple_blaster_item.json | 104 +++++ .../textures/models/item/blaster_basic_c.png | Bin 0 -> 7785 bytes .../textures/models/item/blaster_double.png | Bin 0 -> 7286 bytes .../textures/models/item/blaster_homing.png | Bin 0 -> 7286 bytes .../textures/models/item/blaster_hyper.png | Bin 0 -> 7286 bytes .../textures/models/item/blaster_photon.png | Bin 0 -> 7286 bytes .../textures/models/item/blaster_ray.png | Bin 0 -> 7286 bytes .../textures/models/item/blaster_rupture.png | Bin 0 -> 7286 bytes .../textures/models/item/blaster_shatter.png | Bin 0 -> 7286 bytes .../textures/models/item/blaster_tracking.png | Bin 0 -> 7286 bytes .../textures/models/item/blaster_triple.png | Bin 0 -> 7286 bytes 78 files changed, 6367 insertions(+), 65 deletions(-) rename src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/{BasicBlasterEnergyBoltRenderer.java => BasicEnergyBoltRenderer.java} (58%) create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterCItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponDoubleBlasterItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponHomingBlasterItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponHyperBlasterItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponPhotonBlasterItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponRayBlasterItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponRuptureBlasterItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponShatterBlasterItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponTrackingBlasterItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponTripleBlasterItemModel.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterCItemRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponDoubleBlasterItemRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponHomingBlasterItemRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponHyperBlasterItemRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponPhotonBlasterItemRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponRayBlasterItemRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponRuptureBlasterItemRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponShatterBlasterItemRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponTrackingBlasterItemRenderer.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponTripleBlasterItemRenderer.java delete mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicEnergyBoltEntity.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/HomingEnergyBoltEntity.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterCItem.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponDoubleBlasterItem.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponHomingBlasterItem.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponHyperBlasterItem.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponPhotonBlasterItem.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponRayBlasterItem.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponRuptureBlasterItem.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponShatterBlasterItem.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponTrackingBlasterItem.java create mode 100644 src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponTripleBlasterItem.java create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_basic_blaster_c.geo.json create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_double_blaster.geo.json create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_homing_blaster.geo.json create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_hyper_blaster.geo.json create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_photon_blaster.geo.json create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_ray_blaster.geo.json create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_rupture_blaster.geo.json create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_shatter_blaster.geo.json create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_tracking_blaster.geo.json create mode 100644 src/main/resources/assets/spectrobesmod/geo/weapons/weapon_triple_blaster.geo.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_basic_blaster_c_item.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_basic_blaster_item.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_double_blaster_item.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_homing_blaster_item.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_hyper_blaster_item.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_photon_blaster_item.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_ray_blaster_item.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_rupture_blaster_item.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_shatter_blaster_item.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_tracking_blaster_item.json create mode 100644 src/main/resources/assets/spectrobesmod/models/item/weapon_triple_blaster_item.json create mode 100644 src/main/resources/assets/spectrobesmod/textures/models/item/blaster_basic_c.png create mode 100644 src/main/resources/assets/spectrobesmod/textures/models/item/blaster_double.png create mode 100644 src/main/resources/assets/spectrobesmod/textures/models/item/blaster_homing.png create mode 100644 src/main/resources/assets/spectrobesmod/textures/models/item/blaster_hyper.png create mode 100644 src/main/resources/assets/spectrobesmod/textures/models/item/blaster_photon.png create mode 100644 src/main/resources/assets/spectrobesmod/textures/models/item/blaster_ray.png create mode 100644 src/main/resources/assets/spectrobesmod/textures/models/item/blaster_rupture.png create mode 100644 src/main/resources/assets/spectrobesmod/textures/models/item/blaster_shatter.png create mode 100644 src/main/resources/assets/spectrobesmod/textures/models/item/blaster_tracking.png create mode 100644 src/main/resources/assets/spectrobesmod/textures/models/item/blaster_triple.png diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java index 09e3e4e7..95bf7ee6 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackEntities.java @@ -1,8 +1,9 @@ package com.spectrobes.spectrobesmod.client.entity.attacks; import com.spectrobes.spectrobesmod.SpectrobesInfo; -import com.spectrobes.spectrobesmod.common.entities.attacks.BasicBlasterEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.BasicEnergyBoltEntity; import com.spectrobes.spectrobesmod.common.entities.attacks.EnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.HomingEnergyBoltEntity; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; @@ -24,9 +25,16 @@ public class AttackEntities { .sized(1f, 1f) .build(ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "energy_bolt").toString())); - public static final Supplier> ENTITY_PROJECTILE_BASIC_BLASTER + // = = = TESTING = = = + public static final Supplier> ENTITY_PROJECTILE_BASIC = ENTITY_TYPES.register("entity_basic_blaster_shot", - () -> EntityType.Builder.of(BasicBlasterEnergyBoltEntity::new, MobCategory.MISC) + () -> EntityType.Builder.of(BasicEnergyBoltEntity::new, MobCategory.MISC) .sized(1f, 1f) .build(ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "basic_blaster_shot").toString())); + + public static final Supplier> ENTITY_PROJECTILE_HOMING + = ENTITY_TYPES.register("entity_homing_shot", + () -> EntityType.Builder.of(HomingEnergyBoltEntity::new, MobCategory.MISC) + .sized(1f, 1f) + .build(ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "homing_shot").toString())); } diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java index ad7d3019..73b9ce28 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/AttackRendererManager.java @@ -1,7 +1,7 @@ package com.spectrobes.spectrobesmod.client.entity.attacks; import com.spectrobes.spectrobesmod.SpectrobesInfo; -import com.spectrobes.spectrobesmod.client.entity.attacks.renderer.BasicBlasterEnergyBoltRenderer; +import com.spectrobes.spectrobesmod.client.entity.attacks.renderer.BasicEnergyBoltRenderer; import com.spectrobes.spectrobesmod.client.entity.attacks.renderer.EnergyBoltRenderer; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; @@ -13,6 +13,7 @@ public class AttackRendererManager { @SubscribeEvent public static void registerEntityRenderers(EntityRenderersEvent.RegisterRenderers event) { event.registerEntityRenderer(AttackEntities.ENTITY_ENERGY_BOLT.get(), manager -> new EnergyBoltRenderer(manager)); - event.registerEntityRenderer(AttackEntities.ENTITY_PROJECTILE_BASIC_BLASTER.get(), manager -> new BasicBlasterEnergyBoltRenderer(manager)); + event.registerEntityRenderer(AttackEntities.ENTITY_PROJECTILE_BASIC.get(), manager -> new BasicEnergyBoltRenderer(manager)); + event.registerEntityRenderer(AttackEntities.ENTITY_PROJECTILE_HOMING.get(), manager -> new BasicEnergyBoltRenderer(manager)); } } diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/model/BasicBlasterEnergyBoltModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/model/BasicBlasterEnergyBoltModel.java index f96fa1f4..3a0eed13 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/model/BasicBlasterEnergyBoltModel.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/model/BasicBlasterEnergyBoltModel.java @@ -1,28 +1,30 @@ package com.spectrobes.spectrobesmod.client.entity.attacks.model; import com.spectrobes.spectrobesmod.SpectrobesInfo; -import com.spectrobes.spectrobesmod.common.entities.attacks.BasicBlasterEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.AbstractEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.BasicEnergyBoltEntity; import net.minecraft.resources.ResourceLocation; import software.bernie.geckolib.model.GeoModel; // TODO: This is essentially a duplicate of EnergyBoltModel. Make have different ResourceLocations. -public class BasicBlasterEnergyBoltModel extends GeoModel { +public class BasicBlasterEnergyBoltModel extends GeoModel { @Override - public ResourceLocation getModelResource(BasicBlasterEnergyBoltEntity object) + public ResourceLocation getModelResource(AbstractEnergyBoltEntity object) { return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/energy_bolt.geo.json"); } @Override - public ResourceLocation getTextureResource(BasicBlasterEnergyBoltEntity object) + public ResourceLocation getTextureResource(AbstractEnergyBoltEntity object) { return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/attack/energy_bolt.png"); } @Override - public ResourceLocation getAnimationResource(BasicBlasterEnergyBoltEntity object) + public ResourceLocation getAnimationResource(AbstractEnergyBoltEntity object) { + // TODO: This seems like something that needs to be replaced. return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "animations/krawl/gris.json"); } } \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/BasicBlasterEnergyBoltRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/BasicEnergyBoltRenderer.java similarity index 58% rename from src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/BasicBlasterEnergyBoltRenderer.java rename to src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/BasicEnergyBoltRenderer.java index f5a4ad4a..db14e318 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/BasicBlasterEnergyBoltRenderer.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/entity/attacks/renderer/BasicEnergyBoltRenderer.java @@ -2,21 +2,23 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.spectrobes.spectrobesmod.client.entity.attacks.model.BasicBlasterEnergyBoltModel; -import com.spectrobes.spectrobesmod.common.entities.attacks.BasicBlasterEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.AbstractEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.BasicEnergyBoltEntity; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRendererProvider; import software.bernie.geckolib.renderer.GeoEntityRenderer; // TODO: This is essentially a duplicate of EnergyBoltRenderer. Make have different ResourceLocations. -public class BasicBlasterEnergyBoltRenderer extends GeoEntityRenderer { +/** This renders all the blaster projectiles. */ +public class BasicEnergyBoltRenderer extends GeoEntityRenderer { - public BasicBlasterEnergyBoltRenderer(EntityRendererProvider.Context renderManagerIn) { + public BasicEnergyBoltRenderer(EntityRendererProvider.Context renderManagerIn) { super(renderManagerIn, new BasicBlasterEnergyBoltModel()); } @Override - public void render(BasicBlasterEnergyBoltEntity animatable, float yaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { - poseStack.scale(4,4,4); + public void render(AbstractEnergyBoltEntity animatable, float yaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { +// poseStack.scale(4,4,4); super.render(animatable, yaw, partialTick, poseStack, bufferSource, packedLight); } } diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterCItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterCItemModel.java new file mode 100644 index 00000000..acbce348 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterCItemModel.java @@ -0,0 +1,25 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponBasicBlasterCItem; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponBasicBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponBasicBlasterCItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponBasicBlasterCItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_basic_blaster_c.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponBasicBlasterCItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_basic_c.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponBasicBlasterCItem object) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java index 60d6a54c..ef3f789f 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponBasicBlasterItemModel.java @@ -8,18 +8,17 @@ public class WeaponBasicBlasterItemModel extends GeoModel { @Override - public ResourceLocation getModelResource(WeaponBasicBlasterItem aoiFossilItem) { - System.out.println("getModelResource called"); + public ResourceLocation getModelResource(WeaponBasicBlasterItem object) { return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_basic_blaster.geo.json"); } @Override - public ResourceLocation getTextureResource(WeaponBasicBlasterItem aoiFossilItem) { + public ResourceLocation getTextureResource(WeaponBasicBlasterItem object) { return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_basic.png"); } @Override - public ResourceLocation getAnimationResource(WeaponBasicBlasterItem aoiFossilItem) { + public ResourceLocation getAnimationResource(WeaponBasicBlasterItem object) { return null; } } diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponDoubleBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponDoubleBlasterItemModel.java new file mode 100644 index 00000000..026d2ebd --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponDoubleBlasterItemModel.java @@ -0,0 +1,25 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponBasicBlasterItem; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponDoubleBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponDoubleBlasterItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponDoubleBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_double_blaster.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponDoubleBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_double.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponDoubleBlasterItem object) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponHomingBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponHomingBlasterItemModel.java new file mode 100644 index 00000000..272c422b --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponHomingBlasterItemModel.java @@ -0,0 +1,24 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponHomingBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponHomingBlasterItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponHomingBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_homing_blaster.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponHomingBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_homing.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponHomingBlasterItem object) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponHyperBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponHyperBlasterItemModel.java new file mode 100644 index 00000000..79b11f21 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponHyperBlasterItemModel.java @@ -0,0 +1,24 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponHyperBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponHyperBlasterItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponHyperBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_hyper_blaster.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponHyperBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_hyper.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponHyperBlasterItem object) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponPhotonBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponPhotonBlasterItemModel.java new file mode 100644 index 00000000..4d56a92b --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponPhotonBlasterItemModel.java @@ -0,0 +1,24 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponPhotonBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponPhotonBlasterItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponPhotonBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_photon_blaster.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponPhotonBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_photon.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponPhotonBlasterItem object) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponRayBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponRayBlasterItemModel.java new file mode 100644 index 00000000..6e6cb87b --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponRayBlasterItemModel.java @@ -0,0 +1,25 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponDoubleBlasterItem; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponRayBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponRayBlasterItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponRayBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_ray_blaster.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponRayBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_ray.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponRayBlasterItem object) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponRuptureBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponRuptureBlasterItemModel.java new file mode 100644 index 00000000..654fd386 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponRuptureBlasterItemModel.java @@ -0,0 +1,24 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponRuptureBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponRuptureBlasterItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponRuptureBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_rupture_blaster.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponRuptureBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_rupture.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponRuptureBlasterItem object) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponShatterBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponShatterBlasterItemModel.java new file mode 100644 index 00000000..d584d002 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponShatterBlasterItemModel.java @@ -0,0 +1,24 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponShatterBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponShatterBlasterItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponShatterBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_shatter_blaster.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponShatterBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_shatter.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponShatterBlasterItem object) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponTrackingBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponTrackingBlasterItemModel.java new file mode 100644 index 00000000..84ada004 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponTrackingBlasterItemModel.java @@ -0,0 +1,24 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponTrackingBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponTrackingBlasterItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponTrackingBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_tracking_blaster.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponTrackingBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_tracking.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponTrackingBlasterItem object) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponTripleBlasterItemModel.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponTripleBlasterItemModel.java new file mode 100644 index 00000000..2ad09384 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/model/WeaponTripleBlasterItemModel.java @@ -0,0 +1,25 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.model; + +import com.spectrobes.spectrobesmod.SpectrobesInfo; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponRayBlasterItem; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponTripleBlasterItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WeaponTripleBlasterItemModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(WeaponTripleBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "geo/weapons/weapon_triple_blaster.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WeaponTripleBlasterItem object) { + return ResourceLocation.fromNamespaceAndPath(SpectrobesInfo.MOD_ID, "textures/models/item/blaster_triple.png"); + } + + @Override + public ResourceLocation getAnimationResource(WeaponTripleBlasterItem object) { + return null; + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterCItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterCItemRenderer.java new file mode 100644 index 00000000..47d10d25 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterCItemRenderer.java @@ -0,0 +1,12 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponBasicBlasterCItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponBasicBlasterCItem; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponBasicBlasterItem; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class WeaponBasicBlasterCItemRenderer extends GeoItemRenderer { + public WeaponBasicBlasterCItemRenderer() { + super(new WeaponBasicBlasterCItemModel()); + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterItemRenderer.java index f1e0b241..f5d2c060 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterItemRenderer.java +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponBasicBlasterItemRenderer.java @@ -7,6 +7,5 @@ public class WeaponBasicBlasterItemRenderer extends GeoItemRenderer { public WeaponBasicBlasterItemRenderer() { super(new WeaponBasicBlasterItemModel()); - System.out.println("WeaponBasicBlasterItemRenderer created"); } } diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponDoubleBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponDoubleBlasterItemRenderer.java new file mode 100644 index 00000000..84ff47ce --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponDoubleBlasterItemRenderer.java @@ -0,0 +1,13 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponBasicBlasterItemModel; +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponDoubleBlasterItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponBasicBlasterItem; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponDoubleBlasterItem; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class WeaponDoubleBlasterItemRenderer extends GeoItemRenderer { + public WeaponDoubleBlasterItemRenderer() { + super(new WeaponDoubleBlasterItemModel()); + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponHomingBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponHomingBlasterItemRenderer.java new file mode 100644 index 00000000..d949d14a --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponHomingBlasterItemRenderer.java @@ -0,0 +1,9 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponHomingBlasterItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponHomingBlasterItem; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class WeaponHomingBlasterItemRenderer extends GeoItemRenderer { + public WeaponHomingBlasterItemRenderer() { super(new WeaponHomingBlasterItemModel()); } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponHyperBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponHyperBlasterItemRenderer.java new file mode 100644 index 00000000..aa03ecdf --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponHyperBlasterItemRenderer.java @@ -0,0 +1,11 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponHyperBlasterItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponHyperBlasterItem; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class WeaponHyperBlasterItemRenderer extends GeoItemRenderer { + public WeaponHyperBlasterItemRenderer() { + super(new WeaponHyperBlasterItemModel()); + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponPhotonBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponPhotonBlasterItemRenderer.java new file mode 100644 index 00000000..975a302c --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponPhotonBlasterItemRenderer.java @@ -0,0 +1,9 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponPhotonBlasterItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponPhotonBlasterItem; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class WeaponPhotonBlasterItemRenderer extends GeoItemRenderer { + public WeaponPhotonBlasterItemRenderer() { super(new WeaponPhotonBlasterItemModel()); } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponRayBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponRayBlasterItemRenderer.java new file mode 100644 index 00000000..1c88176f --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponRayBlasterItemRenderer.java @@ -0,0 +1,11 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponRayBlasterItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponRayBlasterItem; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class WeaponRayBlasterItemRenderer extends GeoItemRenderer { + public WeaponRayBlasterItemRenderer() { + super(new WeaponRayBlasterItemModel()); + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponRuptureBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponRuptureBlasterItemRenderer.java new file mode 100644 index 00000000..691c6d84 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponRuptureBlasterItemRenderer.java @@ -0,0 +1,9 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponRuptureBlasterItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponRuptureBlasterItem; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class WeaponRuptureBlasterItemRenderer extends GeoItemRenderer { + public WeaponRuptureBlasterItemRenderer() { super(new WeaponRuptureBlasterItemModel()); } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponShatterBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponShatterBlasterItemRenderer.java new file mode 100644 index 00000000..bacb1122 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponShatterBlasterItemRenderer.java @@ -0,0 +1,11 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponShatterBlasterItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponShatterBlasterItem; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class WeaponShatterBlasterItemRenderer extends GeoItemRenderer { + public WeaponShatterBlasterItemRenderer() { + super(new WeaponShatterBlasterItemModel()); + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponTrackingBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponTrackingBlasterItemRenderer.java new file mode 100644 index 00000000..94d5d481 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponTrackingBlasterItemRenderer.java @@ -0,0 +1,9 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponTrackingBlasterItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponTrackingBlasterItem; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class WeaponTrackingBlasterItemRenderer extends GeoItemRenderer { + public WeaponTrackingBlasterItemRenderer() { super(new WeaponTrackingBlasterItemModel()); } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponTripleBlasterItemRenderer.java b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponTripleBlasterItemRenderer.java new file mode 100644 index 00000000..3728bffd --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/client/items/weapons/renderer/WeaponTripleBlasterItemRenderer.java @@ -0,0 +1,9 @@ +package com.spectrobes.spectrobesmod.client.items.weapons.renderer; + +import com.spectrobes.spectrobesmod.client.items.weapons.model.WeaponTripleBlasterItemModel; +import com.spectrobes.spectrobesmod.common.items.weapons.WeaponTripleBlasterItem; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class WeaponTripleBlasterItemRenderer extends GeoItemRenderer { + public WeaponTripleBlasterItemRenderer() { super(new WeaponTripleBlasterItemModel()); } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java index f28bfc8b..8d1a9612 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/AbstractEnergyBoltEntity.java @@ -26,7 +26,7 @@ public abstract class AbstractEnergyBoltEntity extends AbstractHurtingProjectile public AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); protected int lifetime = 0; - protected int maxLifetime = 100; // Default (Plz set in constructor of child classes) + protected int maxLifetime = 50; // Default (Plz set in constructor of child classes) protected AbstractEnergyBoltEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java deleted file mode 100644 index 3a096fbc..00000000 --- a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicBlasterEnergyBoltEntity.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.spectrobes.spectrobesmod.common.entities.attacks; - -import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.level.Level; -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.util.GeckoLibUtil; - -/** An entity for the basic blaster energy bolt. */ -public class BasicBlasterEnergyBoltEntity extends AbstractEnergyBoltEntity { - - public BasicBlasterEnergyBoltEntity(EntityType pEntityType, Level pLevel) { - super(pEntityType, pLevel); - this.maxLifetime = 50; // <-- Define how long it takes this projectile to expire like this - } -} diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicEnergyBoltEntity.java b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicEnergyBoltEntity.java new file mode 100644 index 00000000..8a073d13 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/BasicEnergyBoltEntity.java @@ -0,0 +1,13 @@ +package com.spectrobes.spectrobesmod.common.entities.attacks; + +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; + +/** An entity for the basic blaster energy bolt. */ +public class BasicEnergyBoltEntity extends AbstractEnergyBoltEntity { + + public BasicEnergyBoltEntity(EntityType pEntityType, Level pLevel) { + super(pEntityType, pLevel); +// this.maxLifetime = 50; // <-- Define how long it takes this projectile to expire like this + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/HomingEnergyBoltEntity.java b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/HomingEnergyBoltEntity.java new file mode 100644 index 00000000..5ce2739a --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/entities/attacks/HomingEnergyBoltEntity.java @@ -0,0 +1,72 @@ +package com.spectrobes.spectrobesmod.common.entities.attacks; + +import com.spectrobes.spectrobesmod.common.entities.krawl.EntityKrawl; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; + +import java.util.Comparator; +import java.util.List; + +public class HomingEnergyBoltEntity extends AbstractEnergyBoltEntity { + + private static final double HOMING_RANGE = 8.0; + private static final double HOMING_STRENGTH = 0.15; + + public HomingEnergyBoltEntity(EntityType type, Level level) { + super(type, level); +// this.maxLifetime = 50; + } + + @Override + public void tick() { + // Safety - Only tick on server + if(!this.level().isClientSide) { + + // Homing (directional change) + Entity target = findTarget(); + if (target != null) { + + // - Movement - + // Direction + Vec3 direction = target.position() + .add(0, target.getBbHeight() * 0.5, 0) + .subtract(this.position()) + .normalize(); + + // Velocity + Vec3 velocity = this.getDeltaMovement(); + Vec3 newVelocity = velocity.add(direction.scale(HOMING_STRENGTH)); + + // Prevent the projectile from accelerating forever + double speed = velocity.length(); + if (newVelocity.length() > speed) newVelocity = newVelocity.normalize().scale(speed); + this.setDeltaMovement(newVelocity); + } + } + + // Do normal tick stuff + super.tick(); + } + + /** Gets a list of Krawl entities within homing range, and chooses the closest. */ + private Entity findTarget() { + // Collect all Krawl entities within HOMING_RANGE + List targets = this.level().getEntities( + this, + this.getBoundingBox().inflate(HOMING_RANGE), // Adds 2x HOMING_RANGE to x, y, and z dimensions + entity -> +// entity instanceof EntityBossKrawl // <-- Some check to make boss Krawl tracking a priority over other Krawl may be good? + entity instanceof EntityKrawl // Only target Krawl entities + && entity.isAlive() + && entity != this.getOwner() + && entity.canBeHitByProjectile() + ); + + // Get nearest entity on list + return targets.stream() + .min(Comparator.comparingDouble(this::distanceTo)) + .orElse(null); + } +} diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java index f9408201..01dcd4bb 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java @@ -1,8 +1,8 @@ package com.spectrobes.spectrobesmod.common.items.weapons; import com.spectrobes.spectrobesmod.client.entity.attacks.AttackEntities; -import com.spectrobes.spectrobesmod.common.entities.attacks.BasicBlasterEnergyBoltEntity; -import com.spectrobes.spectrobesmod.common.entities.attacks.EnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.AbstractEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.BasicEnergyBoltEntity; import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; import com.spectrobes.spectrobesmod.util.WeaponStats; import net.minecraft.network.chat.Component; @@ -15,8 +15,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.*; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; -import net.neoforged.neoforge.event.EventHooks; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.SingletonGeoAnimatable; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; @@ -28,8 +26,6 @@ import java.util.List; import java.util.Random; -import static net.minecraft.world.item.BowItem.getPowerForTime; - public abstract class AbstractSpectrobesRangedWeapon extends Item implements GeoItem, ISpectrobeWeapon { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); @@ -75,30 +71,48 @@ public void releaseUsing(ItemStack pStack, Level pLevel, LivingEntity pEntityLiv // float power = getPowerForTime(charge); // BowItem // if ((double)power < 0.1D) return; // Speed determined by charge power // if (projectileSpeed < 0.1D) return; // Set speed - if (!pLevel.isClientSide) { - BasicBlasterEnergyBoltEntity projectile = new BasicBlasterEnergyBoltEntity(AttackEntities.ENTITY_PROJECTILE_BASIC_BLASTER.get(), pLevel); + fireProjectile(pLevel, player); + + player.awardStat(Stats.ITEM_USED.get(this)); + } + + /** Override this to replace the projectile that this weapon shoots. */ + protected AbstractEnergyBoltEntity createProjectile(Level pLevel) { + return new BasicEnergyBoltEntity(AttackEntities.ENTITY_PROJECTILE_BASIC.get(), pLevel); + } - projectile.setOwner(player); - projectile.setPos(player.getX(), player.getY() + 1.5D, player.getZ()); - projectile.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, projectileSpeed, 1.0F); - projectile.setAtkDamage(GetWeaponStats().AtkDamage); - projectile.setNature(GetWeaponStats().Nature); + /** Firing behavior + setting projectile stats. */ + protected void fireProjectile(Level pLevel, Player player) { + // Safety - Return if not on server + if (pLevel.isClientSide) return; - projectile.shootFromRotation(player, player.xRotO, player.yRotO, 0.0F, projectileSpeed, 1.0F); - pLevel.addFreshEntity(projectile); - } + // Create Projectile + AbstractEnergyBoltEntity projectile = createProjectile(pLevel); + // Set Projectile Stats + projectile.setOwner(player); + projectile.setPos(player.getX(), player.getY() + 1.5D, player.getZ()); + projectile.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, projectileSpeed, 1.0F); + projectile.setAtkDamage(GetWeaponStats().AtkDamage); + projectile.setNature(GetWeaponStats().Nature); + + // Spawn Projectile + projectile.shootFromRotation(player, player.xRotO, player.yRotO, 0.0F, projectileSpeed, 1.0F); + pLevel.addFreshEntity(projectile); + + // Firing SFX pLevel.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.ARROW_SHOOT, SoundSource.PLAYERS, 1.0F, 1.0F / (new Random().nextFloat() * 0.4F + 1.2F) + projectileSpeed * 0.5F); - player.awardStat(Stats.ITEM_USED.get(this)); } // = = = OTHER, MANDATORY METHODS = = = @Override public abstract void registerControllers(AnimatableManager.ControllerRegistrar controllers); @Override public AnimatableInstanceCache getAnimatableInstanceCache() { return this.cache; } @Override public UseAnim getUseAnimation(ItemStack pStack) { return UseAnim.BOW; } - public abstract WeaponStats GetWeaponStats(); + public abstract String getControllerName(); + public abstract WeaponStats GetWeaponStats(); public SpectrobeProperties.Nature getNature() { return GetWeaponStats().Nature; } +// @Override public Predicate getAllSupportedProjectiles() { return stack -> false; } public PlayState predicate(AnimationState animationState) { return animationState.isMoving() ? PlayState.CONTINUE : PlayState.STOP; } diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicBlasterItem.java index f28dd98b..eb8dc5d7 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicBlasterItem.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicBlasterItem.java @@ -39,7 +39,7 @@ public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { @Override public WeaponStats GetWeaponStats() { - return new WeaponStats(20, 1, 1, true, false, SpectrobeProperties.Nature.OTHER); + return new WeaponStats(20, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); } @Override diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicGloveItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicGloveItem.java index cf103bcd..97c7ef3d 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicGloveItem.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicGloveItem.java @@ -63,7 +63,7 @@ public void registerControllers(AnimatableManager.ControllerRegistrar data) { @Override public WeaponStats GetWeaponStats() { - return new WeaponStats(5, 1, 1, false, true, SpectrobeProperties.Nature.OTHER); + return new WeaponStats(5, 1, 1, WeaponStats.WeaponType.GLOVE, SpectrobeProperties.Nature.OTHER); } @Override diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicSwordItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicSwordItem.java index 34949e4a..6e3a2fc7 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicSwordItem.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/BasicSwordItem.java @@ -39,7 +39,7 @@ public void registerControllers(AnimatableManager.ControllerRegistrar data) { @Override public WeaponStats GetWeaponStats() { - return new WeaponStats(15, 1, 1, false, false, SpectrobeProperties.Nature.OTHER); + return new WeaponStats(15, 1, 1, WeaponStats.WeaponType.SWORD, SpectrobeProperties.Nature.OTHER); } @Override diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterCItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterCItem.java new file mode 100644 index 00000000..af84f186 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterCItem.java @@ -0,0 +1,45 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterCItemRenderer; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; + +import java.util.function.Consumer; + +public class WeaponBasicBlasterCItem extends AbstractSpectrobesRangedWeapon { + public WeaponBasicBlasterCItem(Properties pProperties) { super(pProperties); } + + // = = = STATS = = = + @Override + public WeaponStats GetWeaponStats() { + // Like the basic blaster in every way, but is CORONA property. + return new WeaponStats(5, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.CORONA); + } + + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_basic_c_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); + } + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponBasicBlasterCItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + System.out.println("Getting renderer"); + + if (this.renderer == null) { + this.renderer = new WeaponBasicBlasterCItemRenderer(); + } + + return this.renderer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java index 62ec5a15..46c87afe 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponBasicBlasterItem.java @@ -17,7 +17,9 @@ public class WeaponBasicBlasterItem extends AbstractSpectrobesRangedWeapon { // = = = STATS = = = @Override public WeaponStats GetWeaponStats() { - return new WeaponStats(20, 1, 1, true, false, SpectrobeProperties.Nature.OTHER); + // Originally set to 20, but in S1 it's 5 + // Change back if the stat scale is different for this mod. + return new WeaponStats(5, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); } // = = = VISUAL = = = @@ -33,7 +35,6 @@ public void createGeoRenderer(Consumer consumer) { @Override public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { System.out.println("Getting renderer"); -// SpectrobesInfo.LOGGER.info("Getting renderer"); if (this.renderer == null) { this.renderer = new WeaponBasicBlasterItemRenderer(); diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponDoubleBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponDoubleBlasterItem.java new file mode 100644 index 00000000..85e632a8 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponDoubleBlasterItem.java @@ -0,0 +1,43 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterItemRenderer; +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponDoubleBlasterItemRenderer; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; + +import java.util.function.Consumer; + +public class WeaponDoubleBlasterItem extends AbstractSpectrobesRangedWeapon { + public WeaponDoubleBlasterItem(Properties pProperties) { super(pProperties); } + + // = = = STATS = = = + @Override + public WeaponStats GetWeaponStats() { + return new WeaponStats(5, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); + } + + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_double_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); + } + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponDoubleBlasterItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new WeaponDoubleBlasterItemRenderer(); + } + + return this.renderer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponHomingBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponHomingBlasterItem.java new file mode 100644 index 00000000..b3a3b872 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponHomingBlasterItem.java @@ -0,0 +1,51 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.entity.attacks.AttackEntities; +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponHomingBlasterItemRenderer; +import com.spectrobes.spectrobesmod.common.entities.attacks.AbstractEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.HomingEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import net.minecraft.world.level.Level; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; + +import java.util.function.Consumer; + +public class WeaponHomingBlasterItem extends AbstractSpectrobesRangedWeapon { + public WeaponHomingBlasterItem(Properties pProperties) { super(pProperties); } + + // = = = STATS = = = + @Override + public WeaponStats GetWeaponStats() { + return new WeaponStats(10, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); + } + + @Override + protected AbstractEnergyBoltEntity createProjectile(Level pLevel) { + return new HomingEnergyBoltEntity(AttackEntities.ENTITY_PROJECTILE_HOMING.get(), pLevel); + } + + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_homing_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); + } + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponHomingBlasterItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new WeaponHomingBlasterItemRenderer(); + } + + return this.renderer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponHyperBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponHyperBlasterItem.java new file mode 100644 index 00000000..88e8b91e --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponHyperBlasterItem.java @@ -0,0 +1,43 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterItemRenderer; +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponHyperBlasterItemRenderer; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; + +import java.util.function.Consumer; + +public class WeaponHyperBlasterItem extends AbstractSpectrobesRangedWeapon { + public WeaponHyperBlasterItem(Properties pProperties) { super(pProperties); } + + // = = = STATS = = = + @Override + public WeaponStats GetWeaponStats() { + return new WeaponStats(20, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); + } + + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_hyper_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); + } + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponHyperBlasterItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new WeaponHyperBlasterItemRenderer(); + } + + return this.renderer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponPhotonBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponPhotonBlasterItem.java new file mode 100644 index 00000000..5eba3e34 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponPhotonBlasterItem.java @@ -0,0 +1,43 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterItemRenderer; +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponPhotonBlasterItemRenderer; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; + +import java.util.function.Consumer; + +public class WeaponPhotonBlasterItem extends AbstractSpectrobesRangedWeapon { + public WeaponPhotonBlasterItem(Properties pProperties) { super(pProperties); } + + // = = = STATS = = = + @Override + public WeaponStats GetWeaponStats() { + return new WeaponStats(15, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); + } + + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_photon_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); + } + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponPhotonBlasterItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new WeaponPhotonBlasterItemRenderer(); + } + + return this.renderer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponRayBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponRayBlasterItem.java new file mode 100644 index 00000000..702360e0 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponRayBlasterItem.java @@ -0,0 +1,43 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterItemRenderer; +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponRayBlasterItemRenderer; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; + +import java.util.function.Consumer; + +public class WeaponRayBlasterItem extends AbstractSpectrobesRangedWeapon { + public WeaponRayBlasterItem(Properties pProperties) { super(pProperties); } + + // = = = STATS = = = + @Override + public WeaponStats GetWeaponStats() { + return new WeaponStats(10, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); + } + + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_ray_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); + } + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponRayBlasterItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new WeaponRayBlasterItemRenderer(); + } + + return this.renderer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponRuptureBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponRuptureBlasterItem.java new file mode 100644 index 00000000..d6b00e34 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponRuptureBlasterItem.java @@ -0,0 +1,43 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterItemRenderer; +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponRuptureBlasterItemRenderer; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; + +import java.util.function.Consumer; + +public class WeaponRuptureBlasterItem extends AbstractSpectrobesRangedWeapon { + public WeaponRuptureBlasterItem(Properties pProperties) { super(pProperties); } + + // = = = STATS = = = + @Override + public WeaponStats GetWeaponStats() { + return new WeaponStats(30, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); + } + + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_rupture_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); + } + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponRuptureBlasterItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new WeaponRuptureBlasterItemRenderer(); + } + + return this.renderer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponShatterBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponShatterBlasterItem.java new file mode 100644 index 00000000..af818e47 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponShatterBlasterItem.java @@ -0,0 +1,43 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterItemRenderer; +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponShatterBlasterItemRenderer; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; + +import java.util.function.Consumer; + +public class WeaponShatterBlasterItem extends AbstractSpectrobesRangedWeapon { + public WeaponShatterBlasterItem(Properties pProperties) { super(pProperties); } + + // = = = STATS = = = + @Override + public WeaponStats GetWeaponStats() { + return new WeaponStats(20, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); + } + + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_shatter_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); + } + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponShatterBlasterItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new WeaponShatterBlasterItemRenderer(); + } + + return this.renderer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponTrackingBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponTrackingBlasterItem.java new file mode 100644 index 00000000..71d961a7 --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponTrackingBlasterItem.java @@ -0,0 +1,52 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.entity.attacks.AttackEntities; +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterItemRenderer; +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponTrackingBlasterItemRenderer; +import com.spectrobes.spectrobesmod.common.entities.attacks.AbstractEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.entities.attacks.HomingEnergyBoltEntity; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import net.minecraft.world.level.Level; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; + +import java.util.function.Consumer; + +public class WeaponTrackingBlasterItem extends AbstractSpectrobesRangedWeapon { + public WeaponTrackingBlasterItem(Properties pProperties) { super(pProperties); } + + // = = = STATS = = = + @Override + public WeaponStats GetWeaponStats() { + return new WeaponStats(20, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); + } + + @Override + protected AbstractEnergyBoltEntity createProjectile(Level pLevel) { + return new HomingEnergyBoltEntity(AttackEntities.ENTITY_PROJECTILE_HOMING.get(), pLevel); + } + + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_tracking_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); + } + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponTrackingBlasterItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new WeaponTrackingBlasterItemRenderer(); + } + + return this.renderer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponTripleBlasterItem.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponTripleBlasterItem.java new file mode 100644 index 00000000..0b45568a --- /dev/null +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/WeaponTripleBlasterItem.java @@ -0,0 +1,43 @@ +package com.spectrobes.spectrobesmod.common.items.weapons; + +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponBasicBlasterItemRenderer; +import com.spectrobes.spectrobesmod.client.items.weapons.renderer.WeaponTripleBlasterItemRenderer; +import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; +import com.spectrobes.spectrobesmod.util.WeaponStats; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; + +import java.util.function.Consumer; + +public class WeaponTripleBlasterItem extends AbstractSpectrobesRangedWeapon { + public WeaponTripleBlasterItem(Properties pProperties) { super(pProperties); } + + // = = = STATS = = = + @Override + public WeaponStats GetWeaponStats() { + return new WeaponStats(10, 1, 1, WeaponStats.WeaponType.BLASTER, SpectrobeProperties.Nature.OTHER); + } + + // = = = VISUAL = = = + @Override public String getControllerName() { return "weapon_triple_blaster"; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController(this, getControllerName(), 1, super::predicate)); + } + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private WeaponTripleBlasterItemRenderer renderer; + + @Override + public BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new WeaponTripleBlasterItemRenderer(); + } + + return this.renderer; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java b/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java index f1b66a4f..ef22c7c9 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/registry/items/SpectrobesToolsRegistry.java @@ -44,4 +44,36 @@ public class SpectrobesToolsRegistry { public static final Supplier WEAPON_BASIC_BLASTER_ITEM = ITEMS.register("weapon_basic_blaster_item", () -> new WeaponBasicBlasterItem(new Item.Properties())); + public static final Supplier WEAPON_DOUBLE_BLASTER_ITEM = + ITEMS.register("weapon_double_blaster_item", + () -> new WeaponDoubleBlasterItem(new Item.Properties())); + public static final Supplier WEAPON_RAY_BLASTER_ITEM = + ITEMS.register("weapon_ray_blaster_item", + () -> new WeaponRayBlasterItem(new Item.Properties())); + public static final Supplier WEAPON_TRIPLE_BLASTER_ITEM = + ITEMS.register("weapon_triple_blaster_item", + () -> new WeaponTripleBlasterItem(new Item.Properties())); + public static final Supplier WEAPON_HOMING_BLASTER_ITEM = + ITEMS.register("weapon_homing_blaster_item", + () -> new WeaponHomingBlasterItem(new Item.Properties())); + public static final Supplier WEAPON_PHOTON_BLASTER_ITEM = + ITEMS.register("weapon_photon_blaster_item", + () -> new WeaponPhotonBlasterItem(new Item.Properties())); + public static final Supplier WEAPON_SHATTER_BLASTER_ITEM = + ITEMS.register("weapon_shatter_blaster_item", + () -> new WeaponShatterBlasterItem(new Item.Properties())); + public static final Supplier WEAPON_TRACKING_BLASTER_ITEM = + ITEMS.register("weapon_tracking_blaster_item", + () -> new WeaponTrackingBlasterItem(new Item.Properties())); + public static final Supplier WEAPON_HYPER_BLASTER_ITEM = + ITEMS.register("weapon_hyper_blaster_item", + () -> new WeaponHyperBlasterItem(new Item.Properties())); + public static final Supplier WEAPON_RUPTURE_BLASTER_ITEM = + ITEMS.register("weapon_rupture_blaster_item", + () -> new WeaponRuptureBlasterItem(new Item.Properties())); + + // = = = NON-CANNON (...THO MAYYY CONTAIN A COUPLE CANNONS) = = = + public static final Supplier WEAPON_BASIC_BLASTER_C_ITEM = + ITEMS.register("weapon_basic_blaster_c_item", + () -> new WeaponBasicBlasterCItem(new Item.Properties())); } diff --git a/src/main/java/com/spectrobes/spectrobesmod/util/WeaponStats.java b/src/main/java/com/spectrobes/spectrobesmod/util/WeaponStats.java index b50320f9..47178280 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/util/WeaponStats.java +++ b/src/main/java/com/spectrobes/spectrobesmod/util/WeaponStats.java @@ -3,19 +3,24 @@ import com.spectrobes.spectrobesmod.common.spectrobes.SpectrobeProperties; public class WeaponStats { + public enum WeaponType { + OTHER, + SWORD, + GLOVE, + BLASTER + } + public int AtkDamage; public int Speed; public int Tier; - public boolean IsBlaster; - public boolean IsGlove; + public WeaponType Type; public SpectrobeProperties.Nature Nature; - public WeaponStats(int atkDamage, int speed, int tier, boolean isBlaster, boolean isGlove, SpectrobeProperties.Nature nature) { + public WeaponStats(int atkDamage, int speed, int tier, WeaponType type, SpectrobeProperties.Nature nature) { this.AtkDamage = atkDamage; this.Speed = speed; this.Tier = tier; - this.IsBlaster = isBlaster; - this.IsGlove = isGlove; + this.Type = type; this.Nature = nature; } } diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_basic_blaster_c.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_basic_blaster_c.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_basic_blaster_c.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_double_blaster.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_double_blaster.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_double_blaster.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_homing_blaster.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_homing_blaster.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_homing_blaster.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_hyper_blaster.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_hyper_blaster.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_hyper_blaster.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_photon_blaster.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_photon_blaster.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_photon_blaster.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_ray_blaster.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_ray_blaster.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_ray_blaster.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_rupture_blaster.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_rupture_blaster.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_rupture_blaster.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_shatter_blaster.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_shatter_blaster.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_shatter_blaster.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_tracking_blaster.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_tracking_blaster.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_tracking_blaster.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_triple_blaster.geo.json b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_triple_blaster.geo.json new file mode 100644 index 00000000..dea8a01c --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/geo/weapons/weapon_triple_blaster.geo.json @@ -0,0 +1,423 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "blaster", + "pivot": [0, 6, 0], + "rotation": [-90, 0, 0] + }, + { + "name": "Blast", + "parent": "blaster", + "pivot": [0, 6.25, -1], + "cubes": [ + { + "origin": [-0.75, 6.5, -8], + "size": [0.5, 0.5, 2], + "uv": { + "north": {"uv": [24, 18], "uv_size": [0.5, 0.5]}, + "east": {"uv": [21, 16], "uv_size": [2, 0.5]}, + "south": {"uv": [19, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [17, 21], "uv_size": [2, 0.5]}, + "up": {"uv": [21, 18], "uv_size": [0.5, 2]}, + "down": {"uv": [21, 22], "uv_size": [0.5, -2]} + } + } + ] + }, + { + "name": "Sight", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.25, 6.5, -6.25], + "size": [0.75, 0.75, 2.25], + "uv": { + "north": {"uv": [21, 23], "uv_size": [0.75, 0.75]}, + "east": {"uv": [19, 7], "uv_size": [2.25, 0.75]}, + "south": {"uv": [0, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [13, 19], "uv_size": [2.25, 0.75]}, + "up": {"uv": [4, 13], "uv_size": [0.75, 2.25]}, + "down": {"uv": [9, 21.25], "uv_size": [0.75, -2.25]} + } + } + ] + }, + { + "name": "Prop", + "parent": "blaster", + "pivot": [1.125, 7.125, 4.875], + "cubes": [ + { + "origin": [0.55, 6.7, 5.85], + "size": [0.85, 0.95, 0.2], + "pivot": [1.025, 7.175, 4.525], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [7, 22], "uv_size": [0.875, 1]}, + "east": {"uv": [24, 21], "uv_size": [0.25, 1]}, + "south": {"uv": [22, 10], "uv_size": [0.875, 1]}, + "west": {"uv": [22, 24], "uv_size": [0.25, 1]}, + "up": {"uv": [23, 24], "uv_size": [0.875, 0.25]}, + "down": {"uv": [24, 24.25], "uv_size": [0.875, -0.25]} + } + }, + { + "origin": [0.75, 6.75, 3.75], + "size": [0.45, 0.75, 2.25], + "pivot": [1.125, 7.125, 4.875], + "rotation": [-9.75, 0, 0], + "uv": { + "north": {"uv": [16, 24], "uv_size": [0.5, 0.75]}, + "east": {"uv": [16, 19], "uv_size": [2.25, 0.75]}, + "south": {"uv": [24, 16], "uv_size": [0.5, 0.75]}, + "west": {"uv": [19, 17], "uv_size": [2.25, 0.75]}, + "up": {"uv": [10, 19], "uv_size": [0.5, 2.25]}, + "down": {"uv": [8, 22.25], "uv_size": [0.5, -2.25]} + } + } + ] + }, + { + "name": "CannonBody", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-2.75, 6, -3.9], + "size": [4.5, 1.5, 4.65], + "uv": { + "north": {"uv": [13, 13], "uv_size": [4.5, 1.5]}, + "east": {"uv": [13, 3], "uv_size": [4.625, 1.5]}, + "south": {"uv": [13, 15], "uv_size": [4.5, 1.5]}, + "west": {"uv": [13, 11], "uv_size": [4.625, 1.5]}, + "up": {"uv": [0, 8], "uv_size": [4.5, 4.625]}, + "down": {"uv": [8, 4.625], "uv_size": [4.5, -4.625]} + } + }, + { + "origin": [-2.25, 5.5, -4], + "size": [3.5, 2.5, 8], + "uv": { + "north": {"uv": [13, 0], "uv_size": [3.5, 2.5]}, + "east": {"uv": [5, 8], "uv_size": [8, 2.5]}, + "south": {"uv": [13, 8], "uv_size": [3.5, 2.5]}, + "west": {"uv": [8, 5], "uv_size": [8, 2.5]}, + "up": {"uv": [0, 0], "uv_size": [3.5, 8]}, + "down": {"uv": [4, 8], "uv_size": [3.5, -8]} + } + }, + { + "origin": [-1.5, 5, 2.5], + "size": [2, 0.5, 1.25], + "uv": { + "north": {"uv": [22, 3], "uv_size": [2, 0.5]}, + "east": {"uv": [23, 22], "uv_size": [1.25, 0.5]}, + "south": {"uv": [4, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [23, 23], "uv_size": [1.25, 0.5]}, + "up": {"uv": [5, 17], "uv_size": [2, 1.25]}, + "down": {"uv": [7, 18.25], "uv_size": [2, -1.25]} + } + }, + { + "origin": [-2, 4.5, -3.25], + "size": [3, 1, 5.75], + "uv": { + "north": {"uv": [16, 7], "uv_size": [3, 1]}, + "east": {"uv": [16, 5], "uv_size": [5.75, 1]}, + "south": {"uv": [17, 2], "uv_size": [3, 1]}, + "west": {"uv": [16, 6], "uv_size": [5.75, 1]}, + "up": {"uv": [5, 11], "uv_size": [3, 5.75]}, + "down": {"uv": [8, 16.75], "uv_size": [3, -5.75]} + } + } + ] + }, + { + "name": "CannonBarrel", + "parent": "blaster", + "pivot": [0, 6, 0], + "cubes": [ + { + "origin": [-1.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [3, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [9, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [4, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [13, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [23, 4], "uv_size": [0.5, 1.5]}, + "down": {"uv": [5, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 7, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 19], "uv_size": [0.5, 0.5]}, + "east": {"uv": [22, 20], "uv_size": [1.5, 0.5]}, + "south": {"uv": [20, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [22, 21], "uv_size": [1.5, 0.5]}, + "up": {"uv": [22, 22], "uv_size": [0.5, 1.5]}, + "down": {"uv": [2, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.25, 6, -5], + "size": [0.5, 1.5, 1.5], + "uv": { + "north": {"uv": [6, 23], "uv_size": [0.5, 1.5]}, + "east": {"uv": [15, 17], "uv_size": [1.5, 1.5]}, + "south": {"uv": [7, 23], "uv_size": [0.5, 1.5]}, + "west": {"uv": [17, 17], "uv_size": [1.5, 1.5]}, + "up": {"uv": [8, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [9, 24.5], "uv_size": [0.5, -1.5]} + } + }, + { + "origin": [-0.75, 6, -5], + "size": [0.5, 0.5, 1.5], + "uv": { + "north": {"uv": [24, 20], "uv_size": [0.5, 0.5]}, + "east": {"uv": [23, 6], "uv_size": [1.5, 0.5]}, + "south": {"uv": [21, 24], "uv_size": [0.5, 0.5]}, + "west": {"uv": [23, 10], "uv_size": [1.5, 0.5]}, + "up": {"uv": [10, 23], "uv_size": [0.5, 1.5]}, + "down": {"uv": [23, 12.5], "uv_size": [0.5, -1.5]} + } + } + ] + }, + { + "name": "CannonPlate", + "parent": "blaster", + "pivot": [0, 6.25, 0], + "cubes": [ + { + "origin": [-1.75, 6.75, 4], + "size": [2.5, 0.75, 1.25], + "uv": { + "north": {"uv": [18, 16], "uv_size": [2.5, 0.75]}, + "east": {"uv": [22, 7], "uv_size": [1.25, 0.75]}, + "south": {"uv": [6, 19], "uv_size": [2.5, 0.75]}, + "west": {"uv": [9, 22], "uv_size": [1.25, 0.75]}, + "up": {"uv": [17, 0], "uv_size": [2.5, 1.25]}, + "down": {"uv": [2, 18.25], "uv_size": [2.5, -1.25]} + } + }, + { + "origin": [-1.5, 7.5, 4], + "size": [2, 0.5, 2], + "uv": { + "north": {"uv": [22, 0], "uv_size": [2, 0.5]}, + "east": {"uv": [22, 1], "uv_size": [2, 0.5]}, + "south": {"uv": [2, 22], "uv_size": [2, 0.5]}, + "west": {"uv": [22, 2], "uv_size": [2, 0.5]}, + "up": {"uv": [2, 13], "uv_size": [2, 2]}, + "down": {"uv": [2, 17], "uv_size": [2, -2]} + } + }, + { + "origin": [-1.25, 8, -4], + "size": [1.5, 0.25, 10.5], + "uv": { + "north": {"uv": [17, 24], "uv_size": [1.5, 0.25]}, + "east": {"uv": [17, 8], "uv_size": [10.5, 0.25]}, + "south": {"uv": [24, 17], "uv_size": [1.5, 0.25]}, + "west": {"uv": [17, 9], "uv_size": [10.5, 0.25]}, + "up": {"uv": [11, 11], "uv_size": [1.5, 10.5]}, + "down": {"uv": [0, 23.5], "uv_size": [1.5, -10.5]} + } + } + ] + }, + { + "name": "FuelTubes", + "parent": "blaster", + "pivot": [0.625, 8.625, 0.625], + "cubes": [ + { + "origin": [0.25, 8.25, -2.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 0], "uv_size": [0.75, 0.75]}, + "east": {"uv": [1, 24], "uv_size": [0.75, 0.75]}, + "south": {"uv": [24, 1], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 2], "uv_size": [0.75, 0.75]}, + "up": {"uv": [24, 3], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 4.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, -0.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [24, 5], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 7], "uv_size": [0.75, 0.75]}, + "south": {"uv": [11, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 11], "uv_size": [0.75, 0.75]}, + "up": {"uv": [12, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 12.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.25, 8.25, 1.5], + "size": [0.75, 0.75, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [13, 24], "uv_size": [0.75, 0.75]}, + "east": {"uv": [24, 13], "uv_size": [0.75, 0.75]}, + "south": {"uv": [14, 24], "uv_size": [0.75, 0.75]}, + "west": {"uv": [24, 14], "uv_size": [0.75, 0.75]}, + "up": {"uv": [15, 24], "uv_size": [0.75, 0.75]}, + "down": {"uv": [24, 15.75], "uv_size": [0.75, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 0], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [4, 16], "uv_size": [1, 1]}, + "east": {"uv": [12, 23], "uv_size": [0.75, 1]}, + "south": {"uv": [17, 10], "uv_size": [1, 1]}, + "west": {"uv": [13, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 14], "uv_size": [1, 0.75]}, + "down": {"uv": [15, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, -2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [22, 4], "uv_size": [1, 1]}, + "east": {"uv": [23, 15], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 5], "uv_size": [1, 1]}, + "west": {"uv": [16, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 16], "uv_size": [1, 0.75]}, + "down": {"uv": [17, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.15, 8.15, 2], + "size": [0.95, 0.95, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [6, 22], "uv_size": [1, 1]}, + "east": {"uv": [23, 17], "uv_size": [0.75, 1]}, + "south": {"uv": [22, 6], "uv_size": [1, 1]}, + "west": {"uv": [18, 23], "uv_size": [0.75, 1]}, + "up": {"uv": [23, 18], "uv_size": [1, 0.75]}, + "down": {"uv": [20, 23.75], "uv_size": [1, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 2.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [19, 18], "uv_size": [1.125, 1.125]}, + "east": {"uv": [11, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 0], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 11], "uv_size": [0.75, 1.125]}, + "up": {"uv": [12, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [22, 13.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, -1.4], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 2], "uv_size": [1.125, 1.125]}, + "east": {"uv": [14, 22], "uv_size": [0.75, 1.125]}, + "south": {"uv": [6, 20], "uv_size": [1.125, 1.125]}, + "west": {"uv": [22, 14], "uv_size": [0.75, 1.125]}, + "up": {"uv": [15, 22], "uv_size": [1.125, 0.75]}, + "down": {"uv": [17, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [0.05, 8.05, 0.6], + "size": [1.15, 1.15, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [20, 10], "uv_size": [1.125, 1.125]}, + "east": {"uv": [22, 17], "uv_size": [0.75, 1.125]}, + "south": {"uv": [20, 12], "uv_size": [1.125, 1.125]}, + "west": {"uv": [19, 22], "uv_size": [0.75, 1.125]}, + "up": {"uv": [22, 19], "uv_size": [1.125, 0.75]}, + "down": {"uv": [20, 22.75], "uv_size": [1.125, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 3.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 2.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 3], "uv_size": [1.375, 1.375]}, + "east": {"uv": [13, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 10], "uv_size": [1.375, 1.375]}, + "west": {"uv": [14, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 4], "uv_size": [1.375, 0.75]}, + "down": {"uv": [20, 14.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, -0.9], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, -1.375], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [18, 12], "uv_size": [1.375, 1.375]}, + "east": {"uv": [15, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [18, 14], "uv_size": [1.375, 1.375]}, + "west": {"uv": [16, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [20, 15], "uv_size": [1.375, 0.75]}, + "down": {"uv": [17, 20.75], "uv_size": [1.375, -0.75]} + } + }, + { + "origin": [-0.05, 7.95, 1.1], + "size": [1.35, 1.35, 0.75], + "pivot": [0.625, 8.625, 0.625], + "rotation": [67.5, 0, 0], + "uv": { + "north": {"uv": [2, 19], "uv_size": [1.375, 1.375]}, + "east": {"uv": [19, 20], "uv_size": [0.75, 1.375]}, + "south": {"uv": [4, 19], "uv_size": [1.375, 1.375]}, + "west": {"uv": [20, 20], "uv_size": [0.75, 1.375]}, + "up": {"uv": [2, 21], "uv_size": [1.375, 0.75]}, + "down": {"uv": [4, 21.75], "uv_size": [1.375, -0.75]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_basic_blaster_c_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_basic_blaster_c_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_basic_blaster_c_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_basic_blaster_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_basic_blaster_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_basic_blaster_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_double_blaster_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_double_blaster_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_double_blaster_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_homing_blaster_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_homing_blaster_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_homing_blaster_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_hyper_blaster_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_hyper_blaster_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_hyper_blaster_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_photon_blaster_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_photon_blaster_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_photon_blaster_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_ray_blaster_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_ray_blaster_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_ray_blaster_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_rupture_blaster_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_rupture_blaster_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_rupture_blaster_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_shatter_blaster_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_shatter_blaster_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_shatter_blaster_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_tracking_blaster_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_tracking_blaster_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_tracking_blaster_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/models/item/weapon_triple_blaster_item.json b/src/main/resources/assets/spectrobesmod/models/item/weapon_triple_blaster_item.json new file mode 100644 index 00000000..2fdcf0f2 --- /dev/null +++ b/src/main/resources/assets/spectrobesmod/models/item/weapon_triple_blaster_item.json @@ -0,0 +1,104 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_righthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + -1.5, + 5 + ], + "scale": [ + 1.25, + 1.25, + 1.25 + ] + }, + "gui": { + "rotation": [ + 0, + 89, + 0 + ], + "translation": [ + 0, + -5.75, + 0 + ] + }, + "head": { + "translation": [ + 0, + 6.5, + 0 + ] + }, + "fixed": { + "translation": [ + 0, + -5.75, + -2.5 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_basic_c.png b/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_basic_c.png new file mode 100644 index 0000000000000000000000000000000000000000..bfde9a83a4d597ed7a860d587e3095e56db17c30 GIT binary patch literal 7785 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 CaDCGN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_double.png b/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_double.png new file mode 100644 index 0000000000000000000000000000000000000000..ce959cf3ae9404db5994fa5b71f1866181f45ce0 GIT binary patch literal 7286 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 Gh5sMFMCZi- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_homing.png b/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_homing.png new file mode 100644 index 0000000000000000000000000000000000000000..ce959cf3ae9404db5994fa5b71f1866181f45ce0 GIT binary patch literal 7286 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 Gh5sMFMCZi- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_hyper.png b/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_hyper.png new file mode 100644 index 0000000000000000000000000000000000000000..ce959cf3ae9404db5994fa5b71f1866181f45ce0 GIT binary patch literal 7286 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 Gh5sMFMCZi- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_photon.png b/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_photon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce959cf3ae9404db5994fa5b71f1866181f45ce0 GIT binary patch literal 7286 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 Gh5sMFMCZi- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_ray.png b/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_ray.png new file mode 100644 index 0000000000000000000000000000000000000000..ce959cf3ae9404db5994fa5b71f1866181f45ce0 GIT binary patch literal 7286 zcmd5>`6E>A`+mk?>}y4q5JCtcF=4VVSt5z--Yg+&+0A50r7YP(j9qp@WE)gecCwD0 zEDgraU}nDF_w!GDe>vy;aL##_`@XL0zOUz%v7t629Tyz{fKgXR!vp}x*&_tdP@mnb zd_Fn>z@x0Iar<7thmB0zH@xPdU6_?A3p_P!hpqU6mav|VdfO9sj`Wv}CMGQL->y7I z1Xl5+Q|=d-8Aqsxw}@AIJGd{PXv!^%9%1mw!es}B=tvc7%m)4_d&%vp>eiSSBf53t=hCnS^O6U(A|o#--9v|W05-VlG3#@{UGF~dF~L;7NPPouVO3T~l-RVj zVrZHDGBRR0>$%Z$=OfXe-+~K#=EFYxIOF*Q3j;U51ag)j2`m1ONMXLIp*BLv8%LYs z$ssCnn3axiH;QQWA43=!ArMLVNT0rf6clPWEvHNMF)c6*RfBSc5p&H#-^R~4dSD1n zG?20~3N>H}?{b{INk@Z#vT%}J#JPdjqCtIRMgN1oY8rgY{G#LR$)04B+R6d1r{s8$ zs*EgIWOK&4EEo3StFFYi3;h)sho#A1Y3Orqvar;$hx8y|ZT-vSq&qaluc_c1h{Wm| z^i$dW(me86_;UEc3+)?B%;umtFEHKV^T@AgHhre-c@8}Bgd;*#7+qPCBeHM{omJ72Mm-?ub#e)do;Ri2{YfD z99gCp-SD$3@SxGDRL{tJeZC39}lRP^0;pvTIei~eOxB}Sp{jt!&) zxM38&p4WPSgYRa1X=cJR5BNzT?T;N(9XE3(>W1Tp`py&&?AEePh=ruU)JWsGtew77 zA%6Y>zy5`|*doxJ=c}o%1EGabG14OR=4Z4UBY7CEmaF#ujJ_B5r{|Qy()A|!3q2^v z$;nQV9sauU%W0W8OZ?F4wwgEM5fZOf4a_%jK&bSY5qS?>0krfb%LZBHeP3$Zbl9$@(Enf4oM|AZ z;}a})V+I&G1N)?}@1}k`oFO%h}PYreV{4K*RgDp3AV7pQ5JO|4FQ# zx}p}OQsq%|4DPtR@TJkTuTjoU^LhreKIrUw!a~(cP;xM9-u~(SN-$ke;713E$ZjCn z`8fV}m}SOru@Gl~6Cs@Fx^E*~05Jwqmc$qCE`&ShRPsdLgt6VH;AC*eIl+>syW0$mS8@+lW5m z@<0wqB3x@a{oP;x3ZS_9=Y!j#%*Tri8kX9&wM5;>GH`jW(lac@B-Z6bqi0Zvol!*u z7;TF@$};9x)8Tz!DTZhmM0NDei%=$csMA0mPCQ|WH@wLefx!_gUkt<>KVG%wZ~)~V zzW}@OVJlc<`K`Y+VJ`6Gvt%Q+RHIazaMz-*(ShdmsvZWZ+O0yL`8)Go;U_(oHk3+X zTRhSh0IX@U(ye7R-F&AdrDFOnqSdeV^TG<0<~@+3%uW(vZG$_=Js#ktYxc5zbe)J$O-; zG57$?$LuW!-M@w&yf`Z*5LwHi4_iM`qcguqIC2wlh+lF( zF^w_6bkOJvFEchDWM=4<#w>MRzZB$@;;-amCn=Td^PF$rSq?HI&tD~l7~e=`Yx5iO z7q%R$P8woSQ(wzgk9)CUw646>VPN2Ll|pv-GgBbU%X;%M_CPk0e|h}+B&Vk>3=Q|A0b5INW0U6}rjka* zgJ(xeAz)UK6me|perG0N5Jw3l)=xeDhFZ9aChpLldn>a_mxAFo{>IE-rEmQAx92-( zx=6&`sL1&Hj&IAhr!|{=*dyK(At5Ii9AxfbcXg}yjr#M83PFmPca3S*NX^xdKRrf1 z%E+IMbpVyxmnFWD*@(!c1Z^XyF@rcK(U);FPFv z8`M7R8U1_qDn+I#q^d-Bhu6)$p%9sA4v523aD^AeK8D8uigzs{;N@0?S13u-E|8^1 zc)WvzoTjhr3T$~J?@+O3PMdIHE%n6O(@-pftz812K0ENA-gD53c8G_ppqc(a&b8_6 zp);iUxAM3R<~CTk__z`2f0}(@oSO+_ZW1+zXxdR(?vR@&lnw7trJG|}W{3cV$79I0 zsktL|7ljLLahKfPVmTl-e0f!C9mf!o-Nn^Ws60^I*MvsEt-Run9vT8n~lg5P>!aRo-X>XQ`UqtHCQy-+1oF z_~pOW!J(IZtpt~^Y<88p%;N9-?YiCs$ta%Gp^$E(4t9bd5ABd1e0?XC5ObLH4D6hE4*YjaBjxU{XTyQ|+iLGF$dx3j&Mjv>=1Gj>f2ScwF zf7pv@z&}6aO&o$N%+|Eq%_UQz1xM^I8mWrFtNhlWdg8bRuNO?1wK3xjS=HML*ls$VOC!V&M6cq zK?o=9^LyHO!P}j0IXng3oSo=Kr76Qq%e7I@7S(ceHwBTHliA_=5rg*}4h58MB zjJ`cWY3C1B z3wq;{!F#Lm%53m#C>KJ!W&iKoTzf?I7}EDz(Wq*NrrTl-oyNwW&b~{+-J6CBx;xq~ zbb26ikMl3kxvJ~7o_Md+h$=GyyzkD6-&sqdw4;9B`WK2?a3i}Y>o$TRW+g!gC1EN@ zJ&A@!?D^+dx@fm(X)|+Uy{Y5=`OFpD-ZH(WPp&S5-Qtm~5 zfk(p^#oG=Q?p$L?P0+@OReTAOMIHNryW(v-{dhfMSo0^+^J;8Ez!PZ)`|+BF_XJ`S z(pzTmy7!35r;C*;l##LZ0Go%*vpMb)Ki&ar1wl*4j|;Z=l>rYmxukHa5f% zY2%R$CdeXrWaSE%6lv$v^hb23xXf7i!D(tLpUWOGvgvE}MA6(Oe|?#n1I+Hs*PO%P z)wzm+m5in6_~l?}gW52#dh3Z=qSEJu&C8){E*=H4v%lPCb_z{!!3W=MA)xi?nx}rb z!ml%~go3#g$C%ir;;p)f5x^lqu&UHq0$3Sx4YC=;Lp}|TF7;o zspbSFcAt_p4u0Xm6UbcX!^(fvFi&$0n!QMip>QrzOVUG4=ZY*`2tNc&H$h;s+O zJH7MSBfwXx6V3!AMH=NFz<+SOHxusk{w0xlpm2O+I`8f5H8#5w(=`&*pepj`uIv@o zUIidc%4XuEKil^l$^oB)-u^=eNz3zhXOV23udmDtMef1$K>paCCKgQz14DElx7?`R z7E>6%@HFQJE*i{`yp?AdW~V+ggQ`FJ^%NkIWxz66mG2CWmlV~E@vmJZyh$&l!vLW$pwz(fEPG1@1q8@SfnLw?odzv4DAZM=;9epWc{ z^3v!*z6qo=&tW~4$6QW47ClmJk^=h&xn}Z8<*q^ATd0cC#%~TB+ND=G65Gx2Fi=Kr zd0MQHMcB6hZN&w{1(?VLkgJ;bJ_LwxJ;6Ns0^VE`OO9H9czo7pw6z&5e5`X?5y^Mr z;sd$4$XRL%y!oGB&X;p7l6HswRphtKAflcBAIK^e#24(a$o9rE5DEHwiJdTjDr}Qm zz7$qHae&#W*@`llAHEev=dD7iiHDAXWINCE4DS4PJ(BCtgRIK%}%)BItinwniw5TFSTOHm{ zTrO1klsd4?)Eri{1jF*jEBa3s9Jkst7D1 zfvLZ5R;ncSn%sVuE_0Ho9w%7J9*=ghxR9S@tan>a*OXsC-Xs7Vb&jD$_fDfdk7-bM zqxl!4HwfVMG31UVrZ|QGxSWiQ!}*CXPAJah)k65i(TH=2wsu(-o~CIBA)u2PC8vJY z>8;)H&}Y@!X@_M0xf84c&XR*({z>HC`wq6YhKo_T_tNZN`b8I}vi!&X!ia9yW2~5y zob)-=$W=EXu~(fi)UA{5!-Rx@(?)FEvfxY64gZkCWD|1OzaG`V`+Bp*G_~_rG@#sM z6n*~`Z{tk8+@G_U3T4`fO3y{Ej!u$Jq9+s*`Z~@g;2!+A+H6BgcnR9@kF^Z)d1~MN zmD#os@Y4(Mx1b1MVXX&jt;b*v{?Sh>1k zEZ>)4It%Ib&0^-Ep>P?Z{h!LUpGt3e$I8 zPsAU889LUj@d7{ENC7s{2|kN|GPKUTqhm(>{bpD(wI$?ieM!JFc0x6$RLB*t3!ek= zw}+KL+iXZw{3kIF@MCC!qd=^jq)9%W&Dk}}JX18QCntFFfNjb{dqe8D^TV!h67ln- z@831V=9QE=e!;estF0t%w0%E?H&7v)Y`kV z*Jwls0w%2nK?X>8inKj27G@ZVA-&I%dw-)}|98Er)XDW7*7Xeh=WoOH^2l@l zg;*34U;KgqhI0NDD=`Vk(oYwK7dh*KU zRN%-Ti5gY%E35Gk6OLpNBW-3>{nOpN8?rUJB{Ckma%I|K=UTU7oo4dH=#b(uK|%7o zPcpvSN$c!?>dx(^RsOj*-0NDbb=*oR?Y86Xa=GzZV`0DkYzR5;3U8)&PyGY!nRjY5iNGimklXsgyWRKvyiUaI5vc z#_rBa;XPc*u?7fOpL%;a`-1qK*vkr?#QCZ7T$>qjE5rW-)JGG!Y_O#g_owA-esijB!S4>q=vh;SNlQR|4 zn>^3l@Tf`5_RqbRwb)SpKwQ1IJBI$`uxK*Pz_2mDNA8LZ(b_gl{(zJlxKUa`PQgBV zq=MW_`1-2fGpO%p6NWf$BZ}=T8Y_d$RZh#|Fv=|?-_p{Ym9f5_$W8eTXIUQnXR-ec z>nCexHW65woA4oE67BJNxvoFgh3MI|m)jE@`?(?P9g{Hl-(Fs?@t{i(#Kl=9&2Zf$+-QYo|U3^Vl<4-LJ9FzM_8+#cNqp}c<#)&eFYE9`i(Vl zo+l>>4#u#5fx8KdPcT<@Bk#M|kX-`snTMB{l2!e@%s-w!#BS2J^y?7e!?^xWg3fie za+M(_Dv@Q)r;9!B#xc| z$b`lkZZgcuh3c%Zt~GMg(i7I_Mi)d$9fw@#felLhr#tt5GkHoM?BoaR)N<|^LpL`| zzhWysY@P4=iv3gfsHw>*wAJ=zgX%uPhzD72Obouj;n>|BQZL+u9^3Sv-Xw!G@H#0%9S@%EwARlvRpJJ4! zLYocEOp0%v-~XlS94j$jYeR4sYG~H&Ok*s`Yf#@&)V?+Cl}X9GK_u}{*hvMIOFU*5$I|fYE-D% Gh5sMFMCZi- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_rupture.png b/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_rupture.png new file mode 100644 index 0000000000000000000000000000000000000000..ce959cf3ae9404db5994fa5b71f1866181f45ce0 GIT binary patch literal 7286 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 Gh5sMFMCZi- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_shatter.png b/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_shatter.png new file mode 100644 index 0000000000000000000000000000000000000000..ce959cf3ae9404db5994fa5b71f1866181f45ce0 GIT binary patch literal 7286 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 Gh5sMFMCZi- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_tracking.png b/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_tracking.png new file mode 100644 index 0000000000000000000000000000000000000000..ce959cf3ae9404db5994fa5b71f1866181f45ce0 GIT binary patch literal 7286 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 Gh5sMFMCZi- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_triple.png b/src/main/resources/assets/spectrobesmod/textures/models/item/blaster_triple.png new file mode 100644 index 0000000000000000000000000000000000000000..ce959cf3ae9404db5994fa5b71f1866181f45ce0 GIT binary patch literal 7286 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 Gh5sMFMCZi- literal 0 HcmV?d00001 From 56c717eedb6cdf507f384de3ae82adeeb9cdf1d3 Mon Sep 17 00:00:00 2001 From: Skybot437 Date: Mon, 20 Jul 2026 14:28:47 -0700 Subject: [PATCH 4/4] Blaster bolts fire in direction player is facing (they are still effected by player movement direction, but it's nowhere near as dominant as before) --- .../items/weapons/AbstractSpectrobesRangedWeapon.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java index 01dcd4bb..eed904d3 100644 --- a/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java +++ b/src/main/java/com/spectrobes/spectrobesmod/common/items/weapons/AbstractSpectrobesRangedWeapon.java @@ -30,7 +30,11 @@ public abstract class AbstractSpectrobesRangedWeapon extends Item implements Geo private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - protected float projectileSpeed = 0.01F; + // Controls how much the projectile's trajectory will depend on player movement. + // 0 = Will just fly in direction player is moving (if they are moving) + // 1 = Will fly in direction the player is facing + // This is a gradient, but should be kept closer to 1 cause it's hard to hit stuff beyond 5 blocks otherwise. + protected float projectileSpeed = 1F; public AbstractSpectrobesRangedWeapon(Properties pProperties) { super(pProperties); @@ -92,11 +96,11 @@ protected void fireProjectile(Level pLevel, Player player) { // Set Projectile Stats projectile.setOwner(player); projectile.setPos(player.getX(), player.getY() + 1.5D, player.getZ()); - projectile.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, projectileSpeed, 1.0F); projectile.setAtkDamage(GetWeaponStats().AtkDamage); projectile.setNature(GetWeaponStats().Nature); // Spawn Projectile +// projectile.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, projectileSpeed, 1.0F); projectile.shootFromRotation(player, player.xRotO, player.yRotO, 0.0F, projectileSpeed, 1.0F); pLevel.addFreshEntity(projectile);