@@ -147,6 +147,8 @@ private static <T> EntityDataAccessor<T> define(EntityDataSerializer<T> dataSeri
147147 private static final EntityDataAccessor <SecurityMode > SECURITY = define (MekanismDataSerializers .SECURITY .value ());
148148 private static final EntityDataAccessor <Boolean > FOLLOW = define (EntityDataSerializers .BOOLEAN );
149149 private static final EntityDataAccessor <Boolean > DROP_PICKUP = define (EntityDataSerializers .BOOLEAN );
150+ //Note: We sync the default skin part, so that pick item on the robit will properly persist this
151+ private static final EntityDataAccessor <Boolean > DEFAULT_SKIN_MANUALLY_SELECTED = define (EntityDataSerializers .BOOLEAN );
150152 private static final EntityDataAccessor <ResourceKey <RobitSkin >> SKIN = define (MekanismDataSerializers .ROBIT_SKIN .value ());
151153
152154 private static final List <RecipeError > TRACKED_ERROR_TYPES = List .of (
@@ -277,6 +279,7 @@ protected void defineSynchedData(@NotNull SynchedEntityData.Builder builder) {
277279 builder .define (SECURITY , SecurityMode .PUBLIC );
278280 builder .define (FOLLOW , false );
279281 builder .define (DROP_PICKUP , false );
282+ builder .define (DEFAULT_SKIN_MANUALLY_SELECTED , false );
280283 builder .define (SKIN , MekanismRobitSkins .BASE );
281284 }
282285
@@ -347,7 +350,7 @@ public void baseTick() {
347350 energySlot .fillContainerOrConvert ();
348351 recipeCacheLookupMonitor .updateAndProcess ();
349352
350- if (HolidayManager .hasRobitSkinsToday () && getSkin () == MekanismRobitSkins .BASE ) {
353+ if (! isDefaultSkinManuallySelected () && HolidayManager .hasRobitSkinsToday () && getSkin () == MekanismRobitSkins .BASE ) {
351354 //Randomize the robit's skin
352355 setSkin (HolidayManager .getRandomBaseSkin (level ().random ), null );
353356 }
@@ -459,6 +462,7 @@ private ItemStack getItemVariant() {
459462 security .setOwnerUUID (getOwnerUUID ());
460463 security .setSecurityMode (getSecurityMode ());
461464 }
465+ stack .set (MekanismDataComponents .DEFAULT_MANUALLY_SELECTED , isDefaultSkinManuallySelected ());
462466 stack .set (MekanismDataComponents .ROBIT_SKIN , getSkin ());
463467 return stack ;
464468 }
@@ -668,7 +672,7 @@ public IEnergyContainer getEnergyContainer() {
668672 }
669673
670674 @ Override
671- public ItemStack getPickedResult (HitResult target ) {
675+ public ItemStack getPickedResult (@ NotNull HitResult target ) {
672676 return getItemVariant ();
673677 }
674678
@@ -729,6 +733,14 @@ public <T> Optional<T> evaluate(@NotNull BiFunction<Level, BlockPos, T> worldBlo
729733 };
730734 }
731735
736+ public boolean isDefaultSkinManuallySelected () {
737+ return entityData .get (DEFAULT_SKIN_MANUALLY_SELECTED );
738+ }
739+
740+ public void setDefaultSkinManuallySelected (boolean value ) {
741+ entityData .set (DEFAULT_SKIN_MANUALLY_SELECTED , value );
742+ }
743+
732744 @ NotNull
733745 @ Override
734746 public ResourceKey <RobitSkin > getSkin () {
@@ -759,6 +771,9 @@ public boolean setSkin(@NotNull ResourceKey<RobitSkin> skinKey, @Nullable Player
759771 }
760772 }
761773 entityData .set (SKIN , skinKey );
774+ if (skinKey == MekanismRobitSkins .BASE ) {
775+ setDefaultSkinManuallySelected (true );
776+ }
762777 return true ;
763778 }
764779
0 commit comments