This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
Twine/src/main/java/com/thebrokenrail/twine/mixin/MixinServerPlayerEntity.java

57 lines
2.2 KiB
Java

package com.thebrokenrail.twine.mixin;
import com.thebrokenrail.twine.Twine;
import com.thebrokenrail.twine.component.StageDataComponent;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.ChunkPos;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ServerPlayerEntity.class)
public abstract class MixinServerPlayerEntity {
@Shadow
public abstract ServerWorld getServerWorld();
@Unique
private ChunkPos getChunkPos() {
return new ChunkPos(((ServerPlayerEntity) (Object) this).getBlockPos());
}
@Unique
private long lastTime = -1L;
@Inject(at = @At("RETURN"), method = "tick")
public void tick(CallbackInfo info) {
StageDataComponent component = StageDataComponent.getFromWorld(getServerWorld());
StageDataComponent.StageData[] data = component.getData(((ServerPlayerEntity) (Object) this).getUuid());
int stage = StageDataComponent.findStageOfChunk(getChunkPos(), data);
StageDataComponent.StageData stageObj = data[stage];
if (lastTime != -1) {
long diff = Math.max(0, getServerWorld().getTime() - lastTime);
if (diff > 5) {
System.out.println(diff);
}
stageObj.time = stageObj.time + Math.max(0, getServerWorld().getTime() - lastTime);
}
lastTime = getServerWorld().getTime();
if (stageObj.time >= 24000 && stage + 1 < Twine.STAGE_COUNT) {
StageDataComponent.StageData old = data[stage + 1];
if (old != null) {
old.time = 0;
}
StageDataComponent.StageData newData = new StageDataComponent.StageData();
ChunkPos pos = getChunkPos();
newData.x = pos.x;
newData.z = pos.z;
data[stage + 1] = newData;
data[stage] = old;
}
component.markDirty();
}
}