Skip to content

Commit

Permalink
scaled up time slowing entity. need to redo model
Browse files Browse the repository at this point in the history
  • Loading branch information
CammiePone committed Jan 22, 2025
1 parent 2554820 commit e7fbb29
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,12 @@ public void render(TemporalDilationField entity, float entityYaw, float partialT
Vec3 cameraPos = client.getCameraEntity() != null ? new Vec3(client.getCameraEntity().getX(), 0, client.getCameraEntity().getZ()) : Vec3.ZERO;
Vec3 fieldPos = new Vec3(entity.getX(), 0, entity.getZ());
Vec3 directionToCamera = cameraPos.subtract(fieldPos);
float scale = (float) (entity.getBoundingBox().getXsize() / 3f);
float handProgress = (float) Math.toRadians((360f / entity.getMaxAge()) * entity.getAge() + partialTick);

poseStack.pushPose();
poseStack.mulPose(Axis.XP.rotationDegrees(180));
poseStack.scale(scale, scale, scale);
poseStack.translate(0, -1.51, 0);
poseStack.scale(3, 3, 3);
poseStack.translate(0, -3.01, 0);

model.xPlaneRing.yRot = (float) Mth.atan2(directionToCamera.z(), directionToCamera.x());
model.yPlaneRing.yRot = (float) (Math.toRadians(-90) + Mth.atan2(directionToCamera.z(), directionToCamera.x()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ public class ArcanusEntities {
public static final RegistrySupplier<EntityType<EntangledOrb>> ENTANGLED_ORB = ENTITY_TYPES.register("entangled_orb", () -> FabricEntityTypeBuilder.create().entityFactory(EntangledOrb::new).trackedUpdateRate(60).fireImmune().disableSummon().dimensions(EntityDimensions.fixed(0.4F, 0.4F)).build());
public static final RegistrySupplier<EntityType<Aggressorb>> AGGRESSORB = ENTITY_TYPES.register("aggressorb", () -> FabricEntityTypeBuilder.create().entityFactory(Aggressorb::new).trackedUpdateRate(60).fireImmune().disableSummon().dimensions(EntityDimensions.fixed(0.4F, 0.4F)).build());
public static final RegistrySupplier<EntityType<PocketDimensionPortal>> PORTAL = ENTITY_TYPES.register("pocket_dimension_portal", () -> FabricEntityTypeBuilder.create().entityFactory(PocketDimensionPortal::new).fireImmune().disableSummon().dimensions(EntityDimensions.fixed(1.5f, 0.1f)).build());
public static final RegistrySupplier<EntityType<TemporalDilationField>> TEMPORAL_DILATION_FIELD = ENTITY_TYPES.register("temporal_dilation_field", () -> FabricEntityTypeBuilder.create().entityFactory(TemporalDilationField::new).fireImmune().disableSummon().dimensions(EntityDimensions.scalable(6f, 6f)).build());
public static final RegistrySupplier<EntityType<TemporalDilationField>> TEMPORAL_DILATION_FIELD = ENTITY_TYPES.register("temporal_dilation_field", () -> FabricEntityTypeBuilder.create().entityFactory(TemporalDilationField::new).fireImmune().disableSummon().dimensions(EntityDimensions.fixed(9f, 9f)).build());
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,11 @@ public void effect(@Nullable LivingEntity caster, @Nullable Entity sourceEntity,

if(!level.isClientSide() && castSource != null) {
TemporalDilationField dilationField = ArcanusEntities.TEMPORAL_DILATION_FIELD.get().create(level);
double count = effects.stream().filter(ArcanusSpellComponents.TEMPORAL_DILATION::is).count() * potency;
double count = (effects.stream().filter(ArcanusSpellComponents.TEMPORAL_DILATION::is).count() - 1) * potency;

if(dilationField != null) {
dilationField.setPos(target.getLocation());
dilationField.setBoundingBox(dilationField.getBoundingBox().inflate(count - 1)); // TODO not inflating bounding box for some reason?
dilationField.extendMaxAge(((int) count - 1) * 20);
dilationField.extendMaxAge((int) count * 20);
dilationField.setPos(target.getLocation().add(0, -4.5, 0));
ArcanusHelper.copyMagicColor(dilationField, caster);
level.addFreshEntity(dilationField);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import dev.cammiescorner.arcanuscontinuum.Arcanus;
import dev.cammiescorner.arcanuscontinuum.api.entities.Targetable;
import dev.cammiescorner.arcanuscontinuum.common.components.MagicColorComponent;
import dev.cammiescorner.arcanuscontinuum.common.entities.magic.TemporalDilationField;
import dev.cammiescorner.arcanuscontinuum.common.registry.ArcanusComponents;
import dev.cammiescorner.arcanuscontinuum.common.util.supporters.WizardData;
import net.minecraft.Util;
Expand All @@ -11,13 +12,18 @@
import net.minecraft.world.entity.projectile.ProjectileUtil;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.Nullable;

import java.util.UUID;

public class ArcanusHelper {
public static boolean shouldTimeDilate(Entity target, Level level) {
// TODO replace !instanceof check with tag
return !(target instanceof TemporalDilationField) && !level.getEntities(target, target.getBoundingBox(), entity -> entity instanceof TemporalDilationField && entity.position().add(0, 4.5, 0).distanceTo(target.position()) <= entity.getBbWidth() / 2).isEmpty();
}

public static Color getMagicColor(@Nullable Object provider) {
if(provider == null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package dev.cammiescorner.arcanuscontinuum.mixin.client;

import com.mojang.blaze3d.platform.InputConstants;
import dev.cammiescorner.arcanuscontinuum.common.entities.magic.TemporalDilationField;
import dev.cammiescorner.arcanuscontinuum.common.registry.ArcanusMobEffects;
import dev.cammiescorner.arcanuscontinuum.common.util.ArcanusHelper;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraft.client.MouseHandler;
Expand All @@ -23,7 +23,7 @@ public class MouseHandlerMixin {
target = "Lnet/minecraft/client/player/LocalPlayer;turn(DD)V"
))
private void slowMouse(Args args) {
if(minecraft.player != null && minecraft.player.level().getEntities(minecraft.player, minecraft.player.getBoundingBox(), entity -> entity instanceof TemporalDilationField).isEmpty()) {
if(minecraft.player != null && ArcanusHelper.shouldTimeDilate(minecraft.player, minecraft.player.level())) {
double x = args.get(0);
double y = args.get(1);
args.setAll(x * 0.5, y * 0.5);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package dev.cammiescorner.arcanuscontinuum.mixin.client;

import dev.cammiescorner.arcanuscontinuum.common.entities.magic.TemporalDilationField;
import dev.cammiescorner.arcanuscontinuum.common.util.ArcanusHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.Timer;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
Expand All @@ -26,10 +25,7 @@ private void slowDownTicks(long gameTime, CallbackInfoReturnable<Integer> info)
LocalPlayer player = Minecraft.getInstance().player;

if(player != null) {
Level level = player.level();
boolean isInsideTemporalField = !level.getEntities(player, player.getBoundingBox(), entity -> entity instanceof TemporalDilationField).isEmpty();

if(isInsideTemporalField)
if(ArcanusHelper.shouldTimeDilate(player, player.level()))
msPerTick = 1000f / (ticksPerSecond / 2f);
else
msPerTick = 1000f / ticksPerSecond;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package dev.cammiescorner.arcanuscontinuum.mixin.common;

import dev.cammiescorner.arcanuscontinuum.common.entities.magic.TemporalDilationField;
import dev.cammiescorner.arcanuscontinuum.common.util.ArcanusHelper;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
Expand All @@ -16,13 +15,10 @@ public abstract class EntityMixin {
@Unique private Entity self = (Entity) (Object) this;
@Shadow public abstract Vec3 position();
@Shadow public abstract Level level();
@Shadow public abstract AABB getBoundingBox();

@ModifyVariable(method = "playSound(Lnet/minecraft/sounds/SoundEvent;FF)V", at = @At("HEAD"), argsOnly = true, ordinal = 1)
private float pitchDown(float pitch) {
boolean isInsideTemporalField = !level().getEntities(self, getBoundingBox(), entity -> entity instanceof TemporalDilationField && !(self instanceof TemporalDilationField)).isEmpty();

if(isInsideTemporalField)
if(ArcanusHelper.shouldTimeDilate(self, level()))
return pitch * 0.5f;

return pitch;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.cammiescorner.arcanuscontinuum.mixin.common;

import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import dev.cammiescorner.arcanuscontinuum.common.entities.magic.TemporalDilationField;
import dev.cammiescorner.arcanuscontinuum.common.util.ArcanusHelper;
import net.minecraft.core.Holder;
import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.ResourceKey;
Expand All @@ -10,31 +10,23 @@
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.level.entity.EntityTypeTest;
import net.minecraft.world.level.storage.WritableLevelData;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;

import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;

@Mixin(ServerLevel.class)
public abstract class ServerLevelMixin extends Level {
@Shadow public abstract <T extends Entity> List<? extends T> getEntities(EntityTypeTest<Entity, T> typeTest, Predicate<? super T> predicate);

protected ServerLevelMixin(WritableLevelData levelData, ResourceKey<Level> dimension, RegistryAccess registryAccess, Holder<DimensionType> dimensionTypeRegistration, Supplier<ProfilerFiller> profiler, boolean isClientSide, boolean isDebug, long biomeZoomSeed, int maxChainedNeighborUpdates) { super(levelData, dimension, registryAccess, dimensionTypeRegistration, profiler, isClientSide, isDebug, biomeZoomSeed, maxChainedNeighborUpdates); }

@WrapWithCondition(method = "method_31420", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/server/level/ServerLevel;guardEntityTick(Ljava/util/function/Consumer;Lnet/minecraft/world/entity/Entity;)V"
))
private boolean slowTime(ServerLevel instance, Consumer<?> consumer, Entity entity) {
boolean isInsideTemporalField = !getEntities(entity, entity.getBoundingBox(), e -> e instanceof TemporalDilationField && !(entity instanceof TemporalDilationField)).isEmpty();

if(isInsideTemporalField && getGameTime() % 2 == 0) {
if(ArcanusHelper.shouldTimeDilate(entity, this) && getGameTime() % 2 == 0) {
entity.setOldPosAndRot();
entity.tickCount++;
return false;
Expand Down

0 comments on commit e7fbb29

Please sign in to comment.