Skip to content

Commit

Permalink
separated out missile (formerly projectile) & lob
Browse files Browse the repository at this point in the history
  • Loading branch information
CammiePone committed Jan 24, 2025
1 parent 92e8933 commit b41edec
Show file tree
Hide file tree
Showing 28 changed files with 337 additions and 146 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ public static final class TouchShapeProperties {
public static double potencyModifier = 0.2;
}

@Category(id = "projectileShapeProperties", translation = "config.arcanuscontinuum.projectileShapeProperties", sortOrder = 2)
public static final class ProjectileShapeProperties {
@Category(id = "missileShapeProperties", translation = "config.arcanuscontinuum.missileShapeProperties", sortOrder = 2)
public static final class MissileShapeProperties {
@ConfigEntry(id = "enabled", type = EntryType.BOOLEAN, translation = "config.arcanuscontinuum.enabled")
public static boolean enabled = true;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public SpellType getType() {

public abstract void effect(@Nullable LivingEntity caster, @Nullable Entity sourceEntity, Level level, HitResult target, List<SpellEffect> effects, ItemStack stack, double potency);

public boolean shouldTriggerOnceOnExplosion() {
public boolean singleCastOnly() {
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ public static SpellGroup fromNbt(CompoundTag tag) {
// TODO remove in 1.21.1
String nbtId = nbtEffects.getString(i);
ResourceLocation correctedId = switch(nbtId) {
case "arcanuscontinuum:projectile_shape" -> ArcanusSpellComponents.MISSILE.getId();
case "arcanuscontinuum:lob_shape" -> ArcanusSpellComponents.LOB.getId();
case "arcanuscontinuum:explosion_shape" -> ArcanusSpellComponents.BURST.getId();
case "arcanuscontinuum:guardian_orb_shape" -> ArcanusSpellComponents.ENTANGLED_ORB.getId();
case "arcanuscontinuum:aggressorb_shape" -> ArcanusSpellComponents.AGGRESSORB.getId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,8 @@ public void onInitializeClient() {
EntityRendererRegistry.register(ArcanusEntities.OPOSSUM.get(), OpossumEntityRenderer::new);
EntityRendererRegistry.register(ArcanusEntities.NECRO_SKELETON.get(), SkeletonRenderer::new);
EntityRendererRegistry.register(ArcanusEntities.MANA_SHIELD.get(), ManaShieldEntityRenderer::new);
EntityRendererRegistry.register(ArcanusEntities.MAGIC_PROJECTILE.get(), MagicProjectileEntityRenderer::new);
EntityRendererRegistry.register(ArcanusEntities.MISSILE.get(), MissileEntityRenderer::new);
EntityRendererRegistry.register(ArcanusEntities.LOB.get(), LobEntityRenderer::new);
EntityRendererRegistry.register(ArcanusEntities.AOE.get(), AreaOfEffectEntityRenderer::new);
EntityRendererRegistry.register(ArcanusEntities.SMITE.get(), SmiteEntityRenderer::new);
EntityRendererRegistry.register(ArcanusEntities.MAGIC_RUNE.get(), MagicRuneEntityRenderer::new);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import dev.cammiescorner.arcanuscontinuum.Arcanus;
import dev.cammiescorner.arcanuscontinuum.common.entities.magic.MagicProjectile;
import dev.cammiescorner.arcanuscontinuum.common.entities.magic.Missile;
import net.minecraft.client.model.EntityModel;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.*;

public class MagicLobModel extends EntityModel<MagicProjectile> {
public class MagicLobModel extends EntityModel<Missile> {
public static final ModelLayerLocation MODEL_LAYER = new ModelLayerLocation(Arcanus.id("magic_lob"), "main");
public final ModelPart cube1;
public final ModelPart cube2;
Expand Down Expand Up @@ -41,7 +41,7 @@ public void renderToBuffer(PoseStack matrices, VertexConsumer vertexConsumer, in
}

@Override
public void setupAnim(MagicProjectile entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) {
public void setupAnim(Missile entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) {

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import dev.cammiescorner.arcanuscontinuum.Arcanus;
import dev.cammiescorner.arcanuscontinuum.common.entities.magic.MagicProjectile;
import dev.cammiescorner.arcanuscontinuum.common.entities.magic.Missile;
import net.minecraft.client.model.EntityModel;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.*;

public class MagicProjectileModel extends EntityModel<MagicProjectile> {
public class MagicProjectileModel extends EntityModel<Missile> {
public static final ModelLayerLocation MODEL_LAYER = new ModelLayerLocation(Arcanus.id("magic_projectile"), "main");
private final ModelPart base;
public final ModelPart ring1;
Expand Down Expand Up @@ -42,7 +42,7 @@ public void renderToBuffer(PoseStack matrices, VertexConsumer vertexConsumer, in
}

@Override
public void setupAnim(MagicProjectile entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) {
public void setupAnim(Missile entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package dev.cammiescorner.arcanuscontinuum.client.renderer.entity.magic;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import dev.cammiescorner.arcanuscontinuum.Arcanus;
import dev.cammiescorner.arcanuscontinuum.client.ArcanusClient;
import dev.cammiescorner.arcanuscontinuum.client.models.entity.magic.MagicLobModel;
import dev.cammiescorner.arcanuscontinuum.common.entities.magic.Lob;
import dev.cammiescorner.arcanuscontinuum.common.util.ArcanusHelper;
import dev.cammiescorner.arcanuscontinuum.common.util.Color;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.ArrowRenderer;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation;

public class LobEntityRenderer extends ArrowRenderer<Lob> {
private static final ResourceLocation LOB_TEXTURE = Arcanus.id("textures/entity/magic/lob.png");
private final MagicLobModel lobModel;

public LobEntityRenderer(EntityRendererProvider.Context context) {
super(context);
lobModel = new MagicLobModel(context.getModelSet().bakeLayer(MagicLobModel.MODEL_LAYER));
}

@Override
public void render(Lob entity, float yaw, float tickDelta, PoseStack matrices, MultiBufferSource vertices, int light) {
VertexConsumer consumer = vertices.getBuffer(ArcanusClient.getMagicCircles(getTextureLocation(entity)));
Color color = ArcanusHelper.getMagicColor(entity);

matrices.pushPose();

matrices.translate(0, 0.3, 0);
lobModel.cube1.xRot = (entity.tickCount + tickDelta) * 0.1f;
lobModel.cube1.yRot = (entity.tickCount + tickDelta) * 0.1f;
lobModel.cube2.yRot = -(entity.tickCount + tickDelta) * 0.125f;
lobModel.cube2.zRot = -(entity.tickCount + tickDelta) * 0.125f;
lobModel.cube3.zRot = (entity.tickCount + tickDelta) * 0.15f;
lobModel.cube3.xRot = (entity.tickCount + tickDelta) * 0.15f;
lobModel.renderToBuffer(matrices, consumer, light, OverlayTexture.NO_OVERLAY, color.redF(), color.greenF(), color.blueF(), 1f);

matrices.popPose();
}

@Override
public ResourceLocation getTextureLocation(Lob entity) {
return LOB_TEXTURE;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package dev.cammiescorner.arcanuscontinuum.client.renderer.entity.magic;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis;
import dev.cammiescorner.arcanuscontinuum.Arcanus;
import dev.cammiescorner.arcanuscontinuum.client.ArcanusClient;
import dev.cammiescorner.arcanuscontinuum.client.models.entity.magic.MagicProjectileModel;
import dev.cammiescorner.arcanuscontinuum.common.entities.magic.Missile;
import dev.cammiescorner.arcanuscontinuum.common.util.ArcanusHelper;
import dev.cammiescorner.arcanuscontinuum.common.util.Color;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.ArrowRenderer;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;

public class MissileEntityRenderer extends ArrowRenderer<Missile> {
private static final ResourceLocation PROJECTILE_TEXTURE = Arcanus.id("textures/entity/magic/projectile.png");
private final MagicProjectileModel projectileModel;

public MissileEntityRenderer(EntityRendererProvider.Context context) {
super(context);
projectileModel = new MagicProjectileModel(context.getModelSet().bakeLayer(MagicProjectileModel.MODEL_LAYER));
}

@Override
public void render(Missile entity, float yaw, float tickDelta, PoseStack matrices, MultiBufferSource vertices, int light) {
VertexConsumer consumer = vertices.getBuffer(ArcanusClient.getMagicCircles(getTextureLocation(entity)));
Color color = ArcanusHelper.getMagicColor(entity);

matrices.pushPose();

matrices.mulPose(Axis.YP.rotationDegrees(Mth.lerp(tickDelta, entity.yRotO, entity.getYRot()) - 180f));
matrices.mulPose(Axis.XP.rotationDegrees(Mth.lerp(tickDelta, entity.xRotO, entity.getXRot())));
matrices.translate(0f, -1f, 0f);
projectileModel.ring1.zRot = (entity.tickCount + tickDelta) * 0.1f;
projectileModel.ring2.zRot = -(entity.tickCount + tickDelta) * 0.125f;
projectileModel.ring3.zRot = (entity.tickCount + tickDelta) * 0.15f;
projectileModel.renderToBuffer(matrices, consumer, light, OverlayTexture.NO_OVERLAY, color.redF(), color.greenF(), color.blueF(), 1f);

matrices.popPose();
}

@Override
public ResourceLocation getTextureLocation(Missile entity) {
return PROJECTILE_TEXTURE;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public void onInitializeDynamicLights() {
DynamicLightHandlers.registerDynamicLightHandler(ArcanusEntities.BEAM.get(), entity -> (int) (Math.abs(Math.sin(entity.tickCount * 0.05)) * 4 + 5));
DynamicLightHandlers.registerDynamicLightHandler(ArcanusEntities.ENTANGLED_ORB.get(), entity -> (int) (Math.abs(Math.sin(entity.tickCount * 0.05)) * 5 + 6));
DynamicLightHandlers.registerDynamicLightHandler(ArcanusEntities.AGGRESSORB.get(), entity -> (int) (Math.abs(Math.sin(entity.tickCount * 0.05)) * 5 + 6));
DynamicLightHandlers.registerDynamicLightHandler(ArcanusEntities.MAGIC_PROJECTILE.get(), entity -> (int) (Math.abs(Math.sin(entity.tickCount * 0.05)) * 3 + 4));
DynamicLightHandlers.registerDynamicLightHandler(ArcanusEntities.MISSILE.get(), entity -> (int) (Math.abs(Math.sin(entity.tickCount * 0.05)) * 3 + 4));
DynamicLightHandlers.registerDynamicLightHandler(ArcanusEntities.MAGIC_RUNE.get(), entity -> (int) (Math.abs(Math.sin(entity.tickCount * 0.05)) * 3 + 4));
DynamicLightHandlers.registerDynamicLightHandler(ArcanusEntities.MANA_SHIELD.get(), entity -> (int) (Math.abs(Math.sin(entity.tickCount * 0.05)) * 7 + 8));
DynamicLightHandlers.registerDynamicLightHandler(ArcanusEntities.SMITE.get(), entity -> (int) (-0.103501 * entity.tickCount * entity.tickCount + 2.15793 * entity.tickCount + 3.38905));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public void tick() {
AABB box = new AABB(-2, 0, -2, 2, 2.5, 2).move(position());

for(SpellEffect effect : new HashSet<>(effects)) {
if(effect.shouldTriggerOnceOnExplosion())
if(effect.singleCastOnly())
continue;

level().getEntitiesOfClass(Entity.class, box, entity -> entity.isAlive() && !entity.isSpectator() && entity instanceof Targetable targetable && targetable.arcanus$canBeTargeted()).forEach(entity -> {
Expand All @@ -95,7 +95,7 @@ public void tick() {
}

for(SpellEffect effect : new HashSet<>(effects))
if(effect.shouldTriggerOnceOnExplosion())
if(effect.singleCastOnly())
effect.effect(getCaster(), this, level(), new EntityHitResult(this), effects, stack, potency);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package dev.cammiescorner.arcanuscontinuum.common.entities.magic;

public class GuidedShot {
}
Loading

0 comments on commit b41edec

Please sign in to comment.