CreateMod/src/main/java/com/simibubi/create/content/redstone/displayLink/source/TrainStatusDisplaySource.java
2023-05-24 07:59:45 -07:00

52 lines
1.7 KiB
Java

package com.simibubi.create.content.redstone.displayLink.source;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.content.trains.entity.Train;
import com.simibubi.create.content.trains.schedule.Schedule;
import com.simibubi.create.content.trains.schedule.ScheduleRuntime;
import com.simibubi.create.content.trains.schedule.ScheduleRuntime.State;
import com.simibubi.create.content.trains.station.GlobalStation;
import com.simibubi.create.content.trains.station.StationBlockEntity;
import net.minecraft.network.chat.MutableComponent;
public class TrainStatusDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
if (!(context.getSourceBlockEntity() instanceof StationBlockEntity observerBE))
return EMPTY_LINE;
GlobalStation observer = observerBE.getStation();
if (observer == null)
return EMPTY_LINE;
Train currentTrain = observer.getPresentTrain();
if (currentTrain == null)
return EMPTY_LINE;
ScheduleRuntime runtime = currentTrain.runtime;
Schedule schedule = runtime.getSchedule();
if (schedule == null)
return EMPTY_LINE;
if (runtime.paused)
return EMPTY_LINE;
if (runtime.state != State.POST_TRANSIT)
return EMPTY_LINE;
if (runtime.currentEntry == schedule.entries.size() - 1 && !schedule.cyclic)
return EMPTY_LINE;
return runtime.getWaitingStatus(context.level());
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return false;
}
@Override
protected String getTranslationKey() {
return "train_status";
}
}