Skip to content

Commit

Permalink
Initialize addons after campaign load
Browse files Browse the repository at this point in the history
  • Loading branch information
fishface60 committed Feb 12, 2025
1 parent a1e2594 commit abed771
Show file tree
Hide file tree
Showing 10 changed files with 34 additions and 12 deletions.
1 change: 1 addition & 0 deletions src/main/java/net/rptools/maptool/client/AppActions.java
Original file line number Diff line number Diff line change
Expand Up @@ -2635,6 +2635,7 @@ protected void done() {

MapTool.serverCommand().setCampaign(campaign.campaign);

// NOTE: Addons are initialized in here
MapTool.setCampaign(campaign.campaign, campaign.currentZoneId);
ZoneRenderer current = MapTool.getFrame().getCurrentZoneRenderer();
if (current != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ private void handle(AddAddOnLibraryMsg msg) {
Asset asset = AssetManager.getAsset(a);
try {
var addOnLibrary = new AddOnLibraryImporter().importFromAsset(asset);
new LibraryManager().reregisterAddOnLibrary(addOnLibrary);
new LibraryManager().reregisterAddOnLibrary(addOnLibrary, true);
} catch (IOException e) {
SwingUtilities.invokeLater(
() ->
Expand Down Expand Up @@ -658,6 +658,7 @@ private void handle(SetCampaignMsg msg) {
EventQueue.invokeLater(
() -> {
Campaign campaign = Campaign.fromDto(msg.getCampaign());
// NOTE: Addons are initialized in here
MapTool.setCampaign(campaign, null);

// Hide the "Connecting" overlay
Expand Down
1 change: 1 addition & 0 deletions src/main/java/net/rptools/maptool/client/MapTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -957,6 +957,7 @@ public static void setCampaign(Campaign campaign, @Nullable GUID defaultZoneId)
MapTool.getFrame().getCampaignPanel().reset();
MapTool.getFrame().getGmPanel().reset();
UserDefinedMacroFunctions.getInstance().handleCampaignLoadMacroEvent();
new LibraryManager().initializeAddOnLibraries();
}

public static AssetTransferManager getAssetTransferManager() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -628,7 +628,7 @@ public boolean importData(JComponent comp, Transferable t) {
if (MapTool.getPlayer().isGM()) {
try {
var addOnLibrary = new AddOnLibraryImporter().importFromAsset(asset);
new LibraryManager().reregisterAddOnLibrary(addOnLibrary);
new LibraryManager().reregisterAddOnLibrary(addOnLibrary, true);
SwingUtilities.invokeLater(
() -> {
MapTool.showInformation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ private void addAddOnLibrary() {
}
libraryManager.deregisterAddOnLibrary(namespace);
}
libraryManager.reregisterAddOnLibrary(addOnLibrary);
libraryManager.reregisterAddOnLibrary(addOnLibrary, true);
} catch (IOException | InterruptedException | ExecutionException e) {
MapTool.showError("library.import.ioError", e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ private void addAddOnLibrary() {
}
libraryManager.deregisterAddOnLibrary(namespace);
}
libraryManager.reregisterAddOnLibrary(addOnLibrary);
libraryManager.reregisterAddOnLibrary(addOnLibrary, true);
} catch (IOException | InterruptedException | ExecutionException e) {
MapTool.showError("library.import.ioError", e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,9 @@ public boolean addOnLibraryExists(String namespace) {
*
* @param addOn the Add On to register.
*/
public boolean registerAddOnLibrary(AddOnLibrary addOn) {
public boolean registerAddOnLibrary(AddOnLibrary addOn, boolean initialize) {
try {
addOnLibraryManager.registerLibrary(addOn);
addOnLibraryManager.registerLibrary(addOn, initialize);
if (MapTool.isHostingServer()) {
MapTool.serverCommand().addAddOnLibrary(List.of(new TransferableAddOnLibrary(addOn)));
}
Expand Down Expand Up @@ -193,10 +193,10 @@ public void deregisterAddOnLibrary(String namespace) {
*
* @param addOnLibrary the add-on in library to register.
*/
public boolean reregisterAddOnLibrary(AddOnLibrary addOnLibrary) {
public boolean reregisterAddOnLibrary(AddOnLibrary addOnLibrary, boolean initialize) {
try {
addOnLibraryManager.deregisterLibrary(addOnLibrary.getNamespace().get());
addOnLibraryManager.registerLibrary(addOnLibrary);
addOnLibraryManager.registerLibrary(addOnLibrary, initialize);
if (MapTool.isHostingServer()) {
MapTool.serverCommand()
.addAddOnLibrary(List.of(new TransferableAddOnLibrary(addOnLibrary)));
Expand Down Expand Up @@ -298,6 +298,11 @@ public CompletableFuture<AddOnLibraryListDto> addOnLibrariesToDto() {
return addOnLibraryManager.toDto();
}

/** initializes all add-on libraries. */
public void initializeAddOnLibraries() {
addOnLibraryManager.initializeLibraries();
}

/** de-registers all libraries from the library manager. */
public void deregisterAllLibraries() {
deregisterAddOnLibraries();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,20 +71,29 @@ public boolean namespaceRegistered(String namespace) {
* @param library The add-on library to register.
* @throws IllegalStateException if there is already a add-on library with the same namespace.
*/
public void registerLibrary(AddOnLibrary library) {
public void registerLibrary(AddOnLibrary library, boolean initialize) {
String namespace = library.getNamespace().join().toLowerCase();

var registeredLib = namespaceLibraryMap.computeIfAbsent(namespace, k -> library);
if (registeredLib != library) {
throw new IllegalStateException("Library is already registered");
}

library.initialize();
if (initialize) {
library.initialize();
}
new MapToolEventBus()
.getMainEventBus()
.post(new AddOnsAddedEvent(Set.of(library.getLibraryInfo().join())));
}

/** initializes all libraries. */
public void initializeLibraries() {
for (var library : namespaceLibraryMap.values()) {
library.initialize();
}
}

/**
* Deregister the add-on library with the specified namespace.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,9 @@ private void handle(ConnectionSuccessfulMsg connectionSuccessfulMsg) throws IOEx
Asset asset = AssetManager.getAsset(a);
try {
var addOnLibrary = new AddOnLibraryImporter().importFromAsset(asset);
libraryManager.reregisterAddOnLibrary(addOnLibrary);
// Library explicitly not initialized here because scripts need
// content from the campaign that has yet to be loaded.
libraryManager.reregisterAddOnLibrary(addOnLibrary, false);
} catch (IOException e) {
SwingUtilities.invokeLater(
() -> {
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/net/rptools/maptool/util/PersistenceUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -852,7 +852,10 @@ private static void loadAddOnLibraries(PackedFile packedFile) throws IOException
AssetManager.putAsset(asset);
}
AddOnLibrary addOnLibrary = new AddOnLibraryImporter().importFromAsset(asset);
libraryManager.registerAddOnLibrary(addOnLibrary);
// Addons explicitly not initialized here (see AppActions MapTool.setCampaign)
// because the campaign is not loaded yet and addon init scripts
// need access to campaign state.
libraryManager.registerAddOnLibrary(addOnLibrary, false);
}
}

Expand Down

0 comments on commit abed771

Please sign in to comment.