55package net .minecraftforge .gradle .internal ;
66
77import net .minecraftforge .gradleutils .shared .EnhancedFlowAction ;
8+ import org .gradle .api .Project ;
89import org .gradle .api .file .DirectoryProperty ;
910import org .gradle .api .provider .Property ;
10- import org .gradle .api .provider .ProviderFactory ;
11+ import org .gradle .api .provider .SetProperty ;
12+ import org .jetbrains .annotations .Nullable ;
1113
1214import javax .inject .Inject ;
15+ import java .io .File ;
1316import java .io .IOException ;
1417import java .nio .file .Files ;
15- import java .util .Locale ;
18+ import java .text .MessageFormat ;
19+ import java .util .ArrayList ;
1620
1721import static net .minecraftforge .gradle .internal .ForgeGradlePlugin .LOGGER ;
1822
@@ -23,83 +27,74 @@ protected Parameters() {
2327 }
2428 }
2529
26- static abstract class WelcomeMessage extends ForgeGradleFlowAction <WelcomeMessage .Parameters > {
27- enum DisplayOption {
28- ONCE , NEVER , ALWAYS
29- }
30-
30+ static abstract class MessageBoard extends ForgeGradleFlowAction <MessageBoard .Parameters > {
3131 static abstract class Parameters extends ForgeGradleFlowAction .Parameters {
32- final DirectoryProperty messagesDir ;
33- final Property <DisplayOption > displayOption ;
34-
35- protected abstract @ Inject ProviderFactory getProviders ();
32+ final SetProperty <ForgeGradleMessage .QueuedMessage > messages = this .getObjects ().setProperty (ForgeGradleMessage .QueuedMessage .class );
3633
3734 @ Inject
38- public Parameters () {
39- this .messagesDir = this .getObjects ().directoryProperty ();
40- this .displayOption = this .getObjects ().property (DisplayOption .class ).convention (DisplayOption .ONCE ).value (
41- this .getProviders ().gradleProperty ("net.minecraftforge.gradle.messages.welcome" )
42- .orElse (this .getProviders ().systemProperty ("net.minecraftforge.gradle.messages.welcome" ))
43- .map (it -> DisplayOption .valueOf (it .toUpperCase (Locale .ROOT )))
44- );
35+ public Parameters () { }
36+
37+ void queue (Project project , DirectoryProperty globalCaches , ForgeGradleMessage message ) {
38+ this .messages .add (message .queue (project , globalCaches ));
4539 }
4640 }
4741
4842 @ Inject
49- public WelcomeMessage () { }
43+ public MessageBoard () { }
5044
5145 @ Override
52- protected void run (Parameters parameters ) throws IOException {
46+ protected void run (Parameters parameters ) {
5347 // if build failed, don't bother
5448 if (parameters .getFailure ().isPresent ()) return ;
5549
56- // check for marker file
57- var markerFile = parameters .messagesDir .file ("7_0_BETA_WELCOME_1" ).get ().getAsFile ();
58- if (markerFile .exists ()) return ;
59- Files .createDirectories (markerFile .toPath ().getParent ());
60- Files .createFile (markerFile .toPath ());
61-
62- LOGGER .lifecycle (Constants .Messages .WELCOME , markerFile .getAbsolutePath ());
63- }
64- }
65-
66- static abstract class MagicMessage extends ForgeGradleFlowAction <MagicMessage .Parameters > {
67- enum DisplayOption {
68- ONCE , NEVER , ALWAYS
69- }
70-
71- static abstract class Parameters extends ForgeGradleFlowAction .Parameters {
72- final DirectoryProperty messagesDir ;
73- final Property <DisplayOption > displayOption ;
50+ var pending = parameters .messages .get ();
51+ var messages = new ArrayList <ForgeGradleMessage .QueuedMessage >(pending .size ());
52+ @ Nullable File markerFile = null ;
53+ for (var queued : pending ) {
54+ switch (queued .displayOption ()) {
55+ case NEVER :
56+ continue ;
57+
58+ case ONCE :
59+ // check for marker file
60+ markerFile = queued .markerFile ().get ().getAsFile ();
61+ if (markerFile .exists ()) continue ;
62+
63+ try {
64+ Files .createDirectories (markerFile .toPath ().getParent ());
65+ Files .createFile (markerFile .toPath ());
66+ } catch (IOException e ) {
67+ parameters .problems ().reportMessageBoardCacheBroken (e , markerFile , queued .message ().getProperty ());
68+ }
69+
70+ case ALWAYS :
71+ messages .add (queued );
72+ break ;
73+ }
74+ }
7475
75- protected abstract @ Inject ProviderFactory getProviders ();
76+ if (messages .isEmpty ())
77+ return ;
7678
77- @ Inject
78- public Parameters () {
79- this .messagesDir = this .getObjects ().directoryProperty ();
80- this .displayOption = this .getObjects ().property (DisplayOption .class ).convention (DisplayOption .ONCE ).value (
81- this .getProviders ().gradleProperty ("net.minecraftforge.gradle.messages.magic" )
82- .orElse (this .getProviders ().systemProperty ("net.minecraftforge.gradle.messages.magic" ))
83- .map (it -> DisplayOption .valueOf (it .toUpperCase (Locale .ROOT )))
84- );
79+ if (!LOGGER .isLifecycleEnabled ()) {
80+ LOGGER .warn ("WARNING: ForgeGradle messages cannot be displayed as the logger is not configured to display lifecycle messages." );
8581 }
86- }
8782
88- @ Inject
89- public MagicMessage () { }
83+ var count = messages .size ();
84+ LOGGER .lifecycle ("You have " + count + " new message" + (count == 1 ? "" : "s" ) + " from ForgeGradle.\n " );
85+ for (var i = 0 ; i < count ; i ++) {
86+ var queued = messages .get (i );
9087
91- @ Override
92- protected void run (Parameters parameters ) throws IOException {
93- // if build failed, don't bother
94- if (parameters .getFailure ().isPresent ()) return ;
88+ LOGGER .lifecycle ("--- Message %d/%d ---" .formatted (i + 1 , count ));
89+ LOGGER .lifecycle (MessageFormat .format (queued .message ().getText (), queued ));
9590
96- // check for marker file
97- var markerFile = parameters .messagesDir .file ("7_0_BETA_MAGIC_1" ).get ().getAsFile ();
98- if (markerFile .exists ()) return ;
99- Files .createDirectories (markerFile .toPath ().getParent ());
100- Files .createFile (markerFile .toPath ());
91+ if (markerFile != null && queued .displayOption () == ForgeGradleMessage .DisplayOption .ONCE )
92+ LOGGER .lifecycle ('\n' + queued .message ().getCondition (), markerFile .getAbsolutePath ());
10193
102- LOGGER .lifecycle (Constants .Messages .MAGIC , markerFile .getAbsolutePath ());
94+ LOGGER .lifecycle ("--- End of Message ---" );
95+ if (i != count - 1 )
96+ LOGGER .lifecycle ("" );
97+ }
10398 }
10499 }
105100
0 commit comments