2525import java .nio .file .Files ;
2626import java .nio .file .Path ;
2727import java .util .ArrayList ;
28+ import java .util .Arrays ;
2829import java .util .List ;
2930
3031public class TimeLoop implements ModInitializer {
@@ -144,7 +145,7 @@ public void onInitialize() {
144145 ServerPlayerEntity player = handler .getPlayer ();
145146 String playerName = player .getName ().getString ();
146147
147- loopSceneManager .addPlayer (playerName );
148+ loopSceneManager .addPlayer (Arrays . asList ( playerName ) );
148149 loopBossBar .addPlayer (player );
149150
150151 executeCommand (String .format ("mocap scenes add %s" , loopSceneManager .getPlayerSceneName (playerName )));
@@ -248,9 +249,13 @@ private void runLoopIteration() {
248249 if (trackTimeOfDay ) { serverWorld .setTimeOfDay (startTimeOfDay ); }
249250 executeCommand ("mocap playback stop_all including_others" );
250251
251- loopSceneManager .forEachRecordingPlayer (playerName -> {
252+ loopSceneManager .forEachRecordingPlayer (playerData -> {
253+ String playerName = playerData .getName ();
254+ String playerNickname = playerData .getNickname ();
255+ String playerSkin = playerData .getSkin ();
256+
252257 String playerSceneName = loopSceneManager .getPlayerSceneName (playerName );
253- executeCommand (String .format ("mocap playback start .%s %s skin_from_player %s" , playerSceneName , playerName , playerName ));
258+ executeCommand (String .format ("mocap playback start .%s %s skin_from_player %s" , playerSceneName , playerNickname , playerSkin ));
254259 });
255260
256261 loopIteration ++;
@@ -264,7 +269,8 @@ private void runLoopIteration() {
264269 */
265270 private void startRecordings () {
266271 // Start recording for every player
267- loopSceneManager .forEachRecordingPlayer (playerName -> {
272+ loopSceneManager .forEachRecordingPlayer (playerData -> {
273+ String playerName = playerData .getName ();
268274 executeCommand (String .format ("mocap recording start %s" , playerName ));
269275 });
270276 }
@@ -274,7 +280,8 @@ private void startRecordings() {
274280 */
275281 public void saveRecordings () {
276282 // Stop and save recordings for each player
277- loopSceneManager .forEachRecordingPlayer (playerName -> {
283+ loopSceneManager .forEachRecordingPlayer (playerData -> {
284+ String playerName = playerData .getName ();
278285 String recordingName = playerName + "_" + System .currentTimeMillis ();
279286
280287 String playerSceneName = loopSceneManager .getPlayerSceneName (playerName );
@@ -361,7 +368,8 @@ private void removeOldSceneEntries() {
361368 Path sceneDir = worldFolder .resolve ("mocap_files" ).resolve ("scenes" );
362369
363370 List <Path > sceneFiles = new ArrayList <>();
364- loopSceneManager .forEachRecordingPlayer (playerSceneName -> {
371+ loopSceneManager .forEachRecordingPlayer (playerData -> {
372+ String playerSceneName = loopSceneManager .getPlayerSceneName (playerData .getName ());
365373 if (playerSceneName != null && !playerSceneName .isBlank ()) {
366374 sceneFiles .add (sceneDir .resolve (playerSceneName + ".mcmocap_scene" ));
367375 } else {
@@ -425,6 +433,19 @@ public String convertTicksToTime(int ticksLeft) {
425433 int seconds = timeLeft % 60 ;
426434 return String .format ("%02d:%02d:%02d" , hours , minutes , seconds );
427435 }
436+
437+ public void modifyPlayerAttributes (String targetPlayerName , String newPlayerNickname , String newSkin ) {
438+ String playerSceneName = loopSceneManager .getPlayerSceneName (targetPlayerName );
439+ executeCommand (String .format ("mocap scenes modify .%s %s player_skin skin_from_player %s" , playerSceneName , newPlayerNickname , newSkin ));
440+
441+ loopSceneManager .forEachRecordingPlayer (playerData -> {
442+ if (playerData .getName ().equals (targetPlayerName )) {
443+ playerData .setNickname (newPlayerNickname );
444+ playerData .setSkin (newSkin );
445+ LOOP_LOGGER .info ("Modified loop attributes for player '{}' -> '{}' with skin '{}'" , targetPlayerName , newPlayerNickname , newSkin );
446+ }
447+ });
448+ }
428449}
429450
430451// use this in the future
0 commit comments