diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/ArcanusConfig.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/ArcanusConfig.java index 99040ac..7d375a9 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/ArcanusConfig.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/ArcanusConfig.java @@ -1506,7 +1506,7 @@ public static final class TeleportEffectProperties { public static int minimumLevel = 10; @ConfigEntry(id = "procsOnce", type = EntryType.BOOLEAN, translation = "config.arcanuscontinuum.procsOnce") - public static boolean procsOnce = false; + public static boolean procsOnce = true; @ConfigEntry(id = "baseTeleportDistance", type = EntryType.DOUBLE, translation = "config.arcanuscontinuum.baseTeleportDistance") @DoubleRange(min = 0, max = 32) diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/common/entities/magic/AreaOfEffect.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/common/entities/magic/AreaOfEffect.java index 888ce23..26bdfd4 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/common/entities/magic/AreaOfEffect.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/common/entities/magic/AreaOfEffect.java @@ -72,7 +72,7 @@ public void tick() { if(!level().isClientSide()) { int baseLifeSpan = ArcanusConfig.SpellShapes.AOEShapeProperties.baseLifeSpan; int timesToApplyEffects = ArcanusConfig.SpellShapes.AOEShapeProperties.timesToApplyEffects; - int timesToCastNextShape = spellGroups.get(groupIndex + 1).shape().singleCastOnly() ? 1 : ArcanusConfig.SpellShapes.AOEShapeProperties.timesToCastNextShape; + int timesToCastNextShape = timesToCastNextShape(); int actualLifeSpan = (int) (baseLifeSpan * 0.9); if(trueAge > 0) { @@ -198,4 +198,13 @@ public void setProperties(UUID casterId, Vec3 pos, ItemStack stack, List effects, ItemStack stack, double potency) { - if(caster != null && caster.position().distanceTo(target.getLocation()) <= ArcanusConfig.MovementEffects.TeleportEffectProperties.baseTeleportDistance * effects.stream().filter(ArcanusSpellComponents.TELEPORT::is).count() * potency) { + if(caster != null) { Vec3 pos = target.getLocation(); + double maxDistance = ArcanusConfig.MovementEffects.TeleportEffectProperties.baseTeleportDistance * effects.stream().filter(ArcanusSpellComponents.TELEPORT::is).count() * potency; if(target.getType() == HitResult.Type.BLOCK) { BlockHitResult blockHit = (BlockHitResult) target; - pos = pos.add(blockHit.getDirection().getStepX() * 0.5, blockHit.getDirection() == Direction.DOWN ? -2 : 0, blockHit.getDirection().getStepZ() * 0.5); + pos = pos.add(blockHit.getDirection().getStepX() * 0.5, blockHit.getDirection() == Direction.DOWN ? -caster.getBbHeight() : 0, blockHit.getDirection().getStepZ() * 0.5); } - level.broadcastEntityEvent(caster, EntityEvent.TELEPORT); + if(caster.position().distanceTo(pos) <= maxDistance) { + level.broadcastEntityEvent(caster, EntityEvent.TELEPORT); - if(caster.isPassenger()) - caster.dismountTo(pos.x(), pos.y(), pos.z()); - else - caster.teleportTo(pos.x(), pos.y(), pos.z()); + if(caster.isPassenger()) + caster.dismountTo(pos.x(), pos.y(), pos.z()); + else + caster.teleportTo(pos.x(), pos.y(), pos.z()); - level.broadcastEntityEvent(caster, EntityEvent.TELEPORT); + level.broadcastEntityEvent(caster, EntityEvent.TELEPORT); + } } } }