diff --git a/binaries/data/mods/public/simulation/components/Builder.js b/binaries/data/mods/public/simulation/components/Builder.js index 27b9530e06..4f84249744 100644 --- a/binaries/data/mods/public/simulation/components/Builder.js +++ b/binaries/data/mods/public/simulation/components/Builder.js @@ -42,7 +42,10 @@ Builder.prototype.GetEntitiesList = function() return entities; let disabledTemplates = cmpPlayer.GetDisabledTemplates(); - return entities.filter(ent => !disabledTemplates[ent]); + + let cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); + + return entities.filter(ent => !disabledTemplates[ent] && cmpTemplateManager.TemplateExists(ent)); }; Builder.prototype.GetRange = function() diff --git a/binaries/data/mods/public/simulation/components/tests/test_Builder.js b/binaries/data/mods/public/simulation/components/tests/test_Builder.js index 8e0be67d34..802bbcef34 100644 --- a/binaries/data/mods/public/simulation/components/tests/test_Builder.js +++ b/binaries/data/mods/public/simulation/components/tests/test_Builder.js @@ -6,6 +6,10 @@ Engine.LoadComponentScript("Builder.js"); const builderId = 6; const playerId = 1; +AddMock(SYSTEM_ENTITY, IID_TemplateManager, { + "TemplateExists": () => true +}); + let cmpBuilder = ConstructComponent(builderId, "Builder", { "Rate": 1.0, "Entities": { "_string": "structures/{civ}_barracks structures/{civ}_civil_centre" } @@ -38,6 +42,16 @@ AddMock(builderId, IID_Ownership, { TS_ASSERT_UNEVAL_EQUALS(cmpBuilder.GetEntitiesList(), ["structures/iber_barracks", "structures/iber_civil_centre"]); +AddMock(SYSTEM_ENTITY, IID_TemplateManager, { + "TemplateExists": name => name == "structures/iber_civil_centre" +}); + +TS_ASSERT_UNEVAL_EQUALS(cmpBuilder.GetEntitiesList(), ["structures/iber_civil_centre"]); + +AddMock(SYSTEM_ENTITY, IID_TemplateManager, { + "TemplateExists": () => true +}); + AddMock(1, IID_Player, { "GetDisabledTemplates": () => ({ "structures/athen_barracks": true }), "GetPlayerID": () => playerId