package com.thebrokenrail.reliccraft.mixin; import com.thebrokenrail.reliccraft.item.TimeDilaterItem; import net.minecraft.world.World; import net.minecraft.world.level.LevelProperties; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.Constant; import org.spongepowered.asm.mixin.injection.ModifyConstant; @SuppressWarnings("unused") @Mixin(World.class) public abstract class MixinWorld implements TimeDilaterItem.DilatedWorld { @Shadow public abstract boolean isClient(); @Shadow @Final protected LevelProperties properties; @Shadow public abstract long getTime(); @ModifyConstant(constant = @Constant(longValue = 1L), method = "tickTime") public long tickTime(long value) { switch (getTimeSpeed()) { case FAST: { return value * 4L; } case VERY_FAST: { return value * 8L; } default: case NORMAL: { return value; } } } @Override public void setTimeSpeed(TimeDilaterItem.TimeSpeed timeSpeed) { ((TimeDilaterItem.DilatedWorld) properties).setTimeSpeed(timeSpeed); } @Override public TimeDilaterItem.TimeSpeed getTimeSpeed() { return ((TimeDilaterItem.DilatedWorld) properties).getTimeSpeed(); } }