44import com .google .gson .JsonObject ;
55import com .google .gson .JsonParser ;
66import net .fabricmc .api .ModInitializer ;
7- import net .fabricmc .fabric .api .command .v2 .ArgumentTypeRegistry ;
87import net .fabricmc .fabric .api .command .v2 .CommandRegistrationCallback ;
98import net .fabricmc .fabric .api .entity .event .v1 .EntitySleepEvents ;
109import net .fabricmc .fabric .api .entity .event .v1 .ServerPlayerEvents ;
1110import net .fabricmc .fabric .api .event .lifecycle .v1 .ServerLifecycleEvents ;
1211import net .fabricmc .fabric .api .event .lifecycle .v1 .ServerTickEvents ;
1312import net .fabricmc .fabric .api .networking .v1 .ServerPlayConnectionEvents ;
14- import net .minecraft .command .argument .serialize .ConstantArgumentSerializer ;
1513import net .minecraft .server .MinecraftServer ;
1614import net .minecraft .server .network .ServerPlayerEntity ;
1715import net .minecraft .server .world .ServerWorld ;
1816import net .minecraft .text .Text ;
19- import net .minecraft .util .Identifier ;
2017import net .minecraft .util .WorldSavePath ;
2118import org .slf4j .Logger ;
2219import org .slf4j .LoggerFactory ;
2724import java .util .ArrayList ;
2825import java .util .Arrays ;
2926import java .util .List ;
27+ import java .util .Objects ;
3028
3129public class TimeLoop implements ModInitializer {
3230 public static final Logger LOOP_LOGGER = LoggerFactory .getLogger ("TimeLoop" );
@@ -50,7 +48,7 @@ public class TimeLoop implements ModInitializer {
5048 public boolean showLoopInfo ;
5149 public boolean displayTimeInTicks ;
5250 public boolean trackItems ;
53- public LoopTypes loopType ;
51+ public String loopType ;
5452
5553 // The configuration object loaded from disk
5654 public TimeLoopConfig config ;
@@ -66,20 +64,20 @@ public class TimeLoop implements ModInitializer {
6664 public void onInitialize () {
6765 LOOP_LOGGER .info ("Initializing TimeLoop mod" );
6866
69- // Register the custom ArgumentType
70- ArgumentTypeRegistry .registerArgumentType (Identifier .of ("timeloop" ,"" ), LoopTypesArgumentType .class , ConstantArgumentSerializer .of (LoopTypesArgumentType ::new ));
71-
7267 // Register commands
7368 commands = new Commands (this );
74- CommandRegistrationCallback .EVENT .register ((dispatcher , registryAccess , environment ) ->
75- commands .register (dispatcher , registryAccess , environment )
76- );
69+ CommandRegistrationCallback .EVENT .register ((dispatcher , registryAccess , environment ) -> {
70+ // Only register commands on the logical server
71+ if (environment .dedicated || environment .integrated ) {
72+ commands .register (dispatcher );
73+ }
74+ });
7775
7876 // BossBar
7977 loopBossBar = new LoopBossBar ();
8078
8179 EntitySleepEvents .STOP_SLEEPING .register ((entity , sleepingPos ) -> {
82- if (entity .isPlayer () && (loopType == LoopTypes . SLEEP ) ) {
80+ if (entity .isPlayer () && (Objects . equals ( loopType , " SLEEP" ) ) ) {
8381 LOOP_LOGGER .info ("Player slept, looping." );
8482 runLoopIteration ();
8583 }
@@ -112,11 +110,6 @@ public void onInitialize() {
112110 TimeLoop .server = server ;
113111 serverWorld = server .getOverworld ();
114112
115- // Loop boss bar info
116- String loopInfo = (loopType == LoopTypes .TICKS ? "Ticks Left: " + loopLengthTicks : loopType == LoopTypes .TIME_OF_DAY ? "Time left: " + (startTimeOfDay - timeSetting ) : "" );
117- loopBossBar .visible (false );
118- loopBossBar .setBossBarName (loopInfo );
119-
120113 // set mocap settings
121114 executeCommand ("mocap settings advanced experimental_release_warning false" );
122115 executeCommand ("mocap settings playback start_as_recorded true" );
@@ -164,7 +157,9 @@ public void onInitialize() {
164157 if (isLooping ) {
165158 LOOP_LOGGER .info ("Starting recording for newly joined player: {}" , playerName );
166159 executeCommand (String .format ("mocap recording start %s" , playerName ));
167- if (showLoopInfo ) { loopBossBar .visible (true ); }
160+ if (showLoopInfo ) {
161+ loopBossBar .visible (loopType .equals ("TICKS" ) || loopType .equals ("TIME_OF_DAY" ));
162+ }
168163 }
169164 });
170165
@@ -181,15 +176,15 @@ public void onInitialize() {
181176 });
182177
183178 ServerPlayerEvents .AFTER_RESPAWN .register ((oldPlayer , newPlayer , alive ) -> {
184- if (loopType != LoopTypes . DEATH ) { return ; }
179+ if (! Objects . equals ( loopType , " DEATH" ) ) { return ; }
185180 runLoopIteration ();
186181 });
187182
188183 ServerTickEvents .END_SERVER_TICK .register (server -> {
189- if (loopType == LoopTypes . SLEEP || loopType == LoopTypes . DEATH ) { return ; }
184+ if (Objects . equals ( loopType , " SLEEP" ) || Objects . equals ( loopType , " DEATH" ) ) { return ; }
190185
191186 if (isLooping ) {
192- if (loopType == LoopTypes . TIME_OF_DAY ) {
187+ if (Objects . equals ( loopType , " TIME_OF_DAY" ) ) {
193188 if (timeSetting <= startTimeOfDay ) { // prevent stupid 1 tick loop bug
194189 startTimeOfDay = 0 ;
195190 config .startTimeOfDay = 0 ;}
@@ -204,7 +199,7 @@ public void onInitialize() {
204199 }
205200 }
206201
207- else if (loopType == LoopTypes . TICKS ) {
202+ else if (Objects . equals ( loopType , " TICKS" ) ) {
208203 tickCounter ++;
209204 ticksLeft = loopLengthTicks - tickCounter ;
210205
@@ -229,7 +224,10 @@ public void startLoop() {
229224 LOOP_LOGGER .info ("Attempted to start already running recording loop" );
230225 return ;
231226 }
232- if (showLoopInfo ) { loopBossBar .visible (true ); }
227+ if (showLoopInfo ) {
228+ loopBossBar .visible (loopType .equals ("TICKS" ) || loopType .equals ("TIME_OF_DAY" ));
229+ }
230+
233231 isLooping = true ;
234232 config .isLooping = true ;
235233 tickCounter = 0 ;
0 commit comments