AchievementsAPI — различия между версиями

(Новая страница: «<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"> '''<span lang="EN-US" style="font-family:">AchievementsAPI </span>…»)
 
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">
+
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">
'''<span lang="EN-US" style="font-family:">AchievementsAPI&nbsp;</span>'''<span style="font-family:">– мод, который добавляет некоторые достижения с Minecraft: Java Edition и предоставляющий </span><span lang="EN-US" style="font-family:">API&nbsp;</span><span style="font-family:">для создания собственных. В нём содержаться два модуля: </span>''<span lang="EN-US" style="font-family:">AchievementsPopup&nbsp;</span>''<span style="font-family:">и </span>''<span lang="EN-US" style="font-family:">AcvievementsAPI</span>''<span style="font-family:">. Здесь описаны основные их возможности. Больше информации вы можете узнать в виде комментариев в коде мода.</span>
+
'''<span lang="EN-US" style="font-family:">AchievementsAPI&nbsp;</span>'''<span style="font-family:">– библиотека для создания достижений</span><span style="font-family:">. В ней содержаться два модуля: </span>''<span lang="EN-US" style="font-family:">AchievementsPopup&nbsp;</span>''<span style="font-family:">и </span>''<span lang="EN-US" style="font-family:">AcvievementsAPI</span>''<span style="font-family:">. Здесь описаны основные их возможности. Больше информации вы можете узнать в виде комментариев в коде библиотеки.</span>
  
 +
<div class="mw-parser-output"><div class="mw-parser-output">
 +
== Загрузка ==
 +
 +
{| border="1" cellpadding="1" cellspacing="1"
 +
|-
 +
| Версия
 +
| Ссылка
 +
| Список изменений
 +
| Дата релиза
 +
|-
 +
| 1
 +
| [https://github.com/DDCompany/ICLibraries/releases/tag/achievements-api-v1 Скачать]
 +
| &nbsp;
 +
| 20.07.20
 +
|-
 +
| '''0'''
 +
| [https://github.com/DDCompany/ICLibraries/releases/tag/achievements-api-v0 Скачать]
 +
| Первая версия
 +
| 13.07.20
 +
|}
 +
</div> </div>
 +
 +
== Условия использования ==
 +
 +
*Запрещено распространение библиотеки на сторонних источниках&nbsp;без ссылки на официальное сообщество([https://vk.com/forestry_pe https://vk.com/forestry_pe])
 +
*Запрещено изменение кода библиотеки
 +
*Запрещено явное копирование кода в другие библиотеки или моды
 +
*Используя библиотеку вы автоматически соглашаетесь с описанными&nbsp;выше условиями
 +
 +
<div class="mw-parser-output">
 
== AchievementPopup ==
 
== AchievementPopup ==
  
<span style="font-family:">Данный модуль позволяет создавать кастомные уведомления. Для этого существует метод </span>''<span lang="EN-US" style="font-family:">show</span>''<span style="font-family:">. Он добавляет уведомление в очередь на показ, из которой они последовательно &nbsp;показываются. Принимает объект со следующими полями:&nbsp;</span><br/> &nbsp;
+
<span style="font-family:">Данный модуль позволяет создавать кастомные уведомления. Для этого существует метод </span>''<span lang="EN-US" style="font-family:">show</span>''<span style="font-family:">. Он добавляет уведомление в очередь на показ, из которой они последовательно&nbsp;показываются. Принимает объект со следующими полями:&nbsp;</span><br/> &nbsp;
  
 
{| class="MsoTableGrid" style="border-collapse:collapse; border:solid windowtext 1.0pt"
 
{| class="MsoTableGrid" style="border-collapse:collapse; border:solid windowtext 1.0pt"
Строка 34: Строка 64:
  
 
<br/> Пример использования<span lang="EN-US" style="font-family:">:</span>
 
<br/> Пример использования<span lang="EN-US" style="font-family:">:</span>
<syntaxhighlight lang="Javascript">
+
<syntaxhighlight lang="Javascript">Callback.addCallback("ItemUse", function () {
ModAPI.addAPICallback("AchievementsAPI", function (api) {
+
    AchievementPopup.show({
    Callback.addCallback("ItemUse", function () {
+
        title: "Title",
        api.AchievementPopup.show({
+
        description: "And description",
            title: "Title",
+
        item: {
            description: "And description",
+
            id: 264,
            item: {
+
            data: 0,
                id: 264,
+
            count: 1
                data: 0,
+
        }
                count: 1
+
    });
            }
+
});</syntaxhighlight>
        });
+
</div>
    });
 
});
 
</syntaxhighlight>
 
  
 
== AchievementAPI ==
 
== AchievementAPI ==
  
<span style="font-family:">В </span>''<span lang="EN-US" style="font-family:">AchievementAPI</span>''<span style="font-family:">представлен основной функционал мода - создание достижений. &nbsp;Но для начала необходимо создать группу, в которой они будут располагаться, используя </span>''<span lang="EN-US" style="font-family:">registerGroup</span>''<span style="font-family:">(</span>''<span lang="EN-US" style="font-family:">obj)</span>'''''<span style="font-family:">,</span>'''<span style="font-family:">где </span>''<span lang="EN-US" style="font-family:">obj&nbsp;</span>''<span style="font-family:">– объект, описывающий группу. Все поля, которые он может содержать, описаны в таблице, приведённой далее.</span><br/> '''&nbsp;'''
+
<span style="font-family:">В </span>''<span lang="EN-US" style="font-family:">AchievementAPI&nbsp;</span>''<span style="font-family:">представлен основной функционал мода - создание достижений. &nbsp;Но для начала необходимо создать группу, в которой они будут находиться, используя </span>''<span lang="EN-US" style="font-family:">registerGroup</span>''<span style="font-family:">(</span>''<span lang="EN-US" style="font-family:">obj)</span>'''''<span style="font-family:">,</span>'''<span style="font-family:">где </span>''<span lang="EN-US" style="font-family:">obj&nbsp;</span>''<span style="font-family:">– объект, описывающий группу. Все поля, которые он может содержать, описаны в таблице, приведённой далее.</span><br/> '''&nbsp;'''
  
 
{| class="MsoTableGrid" style="border-collapse:collapse; border:solid windowtext 1.0pt"
 
{| class="MsoTableGrid" style="border-collapse:collapse; border:solid windowtext 1.0pt"
Строка 101: Строка 128:
  
 
<span style="font-family:">Пример</span><span lang="EN-US" style="font-family:">:</span>
 
<span style="font-family:">Пример</span><span lang="EN-US" style="font-family:">:</span>
<syntaxhighlight lang="Javascript">ModAPI.addAPICallback("AchievementsAPI", function (api) {  
+
<pre>AchievementAPI.registerGroup({
    api.AchievementAPI.registerGroup({  
+
    unique: "vanilla",
        unique: "vanilla",  
+
    name: "Vanilla",
        name: "Vanilla",  
+
    width: 600,
        width: 600,  
+
    height: 250,
        height: 250,  
+
    size: 100,
        size: 100,  
+
    bgTexture: "end",
        bgTexture: "end",  
+
    icon: {
        icon: {  
+
        id: 1
            id: 1  
+
    }
        }  
+
});</pre>
    });  
 
});  </syntaxhighlight>
 
  
 
<span style="font-family:">Для регистрации самих достижений используется метод </span>''<span lang="EN-US" style="font-family:">register</span>''<span style="font-family:">(</span><span lang="EN-US" style="font-family:">groupUnique</span><span style="font-family:">,</span><span lang="EN-US" style="font-family:">obj</span><span style="font-family:">)</span>''<span style="font-family:">,</span>''<span style="font-family:">где </span>''<span lang="EN-US" style="font-family:">groupUnique&nbsp;</span>''<span style="font-family:">– идентификатор группы, </span>''<span lang="EN-US" style="font-family:">obj&nbsp;</span>''<span style="font-family:">– объект, описывающий достижений. Для указания значения первого поля можно использовать как созданную вами, так и из сторонних модов.<br/> <span style="color:red">ВНИМАНИЕ! Группа должна быть зарегистрирована до создания достижений для неё!</span></span>
 
<span style="font-family:">Для регистрации самих достижений используется метод </span>''<span lang="EN-US" style="font-family:">register</span>''<span style="font-family:">(</span><span lang="EN-US" style="font-family:">groupUnique</span><span style="font-family:">,</span><span lang="EN-US" style="font-family:">obj</span><span style="font-family:">)</span>''<span style="font-family:">,</span>''<span style="font-family:">где </span>''<span lang="EN-US" style="font-family:">groupUnique&nbsp;</span>''<span style="font-family:">– идентификатор группы, </span>''<span lang="EN-US" style="font-family:">obj&nbsp;</span>''<span style="font-family:">– объект, описывающий достижений. Для указания значения первого поля можно использовать как созданную вами, так и из сторонних модов.<br/> <span style="color:red">ВНИМАНИЕ! Группа должна быть зарегистрирована до создания достижений для неё!</span></span>
Строка 148: Строка 173:
 
|-
 
|-
 
| style="width:114.75pt; border:solid windowtext 1.0pt; border-top:none" width="153" | <p align="center" style="margin-bottom:.0001pt; text-align:center; padding:0cm 5.4pt 0cm 5.4pt"><span style="line-height:normal"><span lang="EN-US" style="font-family:">parent</span></span></p>  
 
| style="width:114.75pt; border:solid windowtext 1.0pt; border-top:none" width="153" | <p align="center" style="margin-bottom:.0001pt; text-align:center; padding:0cm 5.4pt 0cm 5.4pt"><span style="line-height:normal"><span lang="EN-US" style="font-family:">parent</span></span></p>  
| style="width:208.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt" width="278" | <p style="text-align: center;"><span style="line-height:normal"><span style="font-family:">Задаёт родителя достижения. Данный объект может содержать </span>''<span lang="EN-US" style="font-family:">unique</span>''<span style="font-family:">, идентификатор родительского достижения, и </span>''<span lang="EN-US" style="font-family:">groupUnique</span>''<span style="font-family:">, группа, в которой оно находится. Если </span>''<span lang="EN-US" style="font-family:">groupUnique</span>''<span style="font-family:">не задано, поиск родителя будет осуществляться в пределах текущей группы и, если это завершилось успехом, они будут соединены линией.</span></span></p>  
+
| style="width:208.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt" width="278" | <p style="text-align: center;"><span style="line-height:normal"><span style="font-family:">Задаёт родителя достижения. Данный объект может содержать </span>''<span lang="EN-US" style="font-family:">unique</span>''<span style="font-family:">, идентификатор родительского достижения, и </span>''<span lang="EN-US" style="font-family:">groupUnique</span>''<span style="font-family:">, группа, в которой оно находится. Если </span>''<span lang="EN-US" style="font-family:">groupUnique&nbsp;</span>''<span style="font-family:">не задано, поиск родителя будет осуществляться в пределах текущей группы и, если это завершилось успехом, они будут соединены линией. РОДИТЕЛЬСКОЕ ДОСТИЖЕНИЕ ДОЛЖНО БЫТЬ ЗАРЕГИСТРИРОВАНО РАНЬШЕ ДОЧЕРНЕГО!</span></span></p>  
 
| style="width:155.25pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt" width="207" | <p align="center" style="margin-bottom:.0001pt; text-align:center; padding:0cm 5.4pt 0cm 5.4pt">&nbsp;</p>  
 
| style="width:155.25pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt" width="207" | <p align="center" style="margin-bottom:.0001pt; text-align:center; padding:0cm 5.4pt 0cm 5.4pt">&nbsp;</p>  
 
|-
 
|-
Строка 163: Строка 188:
 
| style="width:155.25pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt" width="207" | <p align="center" style="margin-bottom:.0001pt; text-align:center; padding:0cm 5.4pt 0cm 5.4pt">&nbsp;</p>  
 
| style="width:155.25pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt" width="207" | <p align="center" style="margin-bottom:.0001pt; text-align:center; padding:0cm 5.4pt 0cm 5.4pt">&nbsp;</p>  
 
|-
 
|-
| style="width:114.75pt; border:solid windowtext 1.0pt; border-top:none" width="153" | <p align="center" style="margin-bottom:.0001pt; text-align:center; padding:0cm 5.4pt 0cm 5.4pt"><span style="background:white"><span style="line-height:normal"><span style="tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:"><span style="color:black">notCompletePopup</span></span></span></span></span></span></p>  
+
| style="width:114.75pt; border:solid windowtext 1.0pt; border-top:none" width="153" | <p align="center" style="margin-bottom: 0.0001pt; text-align: center; padding: 0cm 5.4pt;"><span style="font-size:smaller;"><span style="background:white"><span style="line-height:normal"><span lang="EN-US"><span style="color:black">notCompletePopup</span></span></span></span></span></p>  
 
| style="width:208.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt" width="278" | <p style="text-align: center;"><span style="line-height:normal"><span style="font-family:">Если истина, уведомление о выполнении достижения показываться не будет.</span></span></p>  
 
| style="width:208.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt" width="278" | <p style="text-align: center;"><span style="line-height:normal"><span style="font-family:">Если истина, уведомление о выполнении достижения показываться не будет.</span></span></p>  
 
| style="width:155.25pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt" width="207" | <p align="center" style="margin-bottom:.0001pt; text-align:center; padding:0cm 5.4pt 0cm 5.4pt"><span style="line-height:normal"><span lang="EN-US" style="font-family:">false</span></span></p>  
 
| style="width:155.25pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt" width="207" | <p align="center" style="margin-bottom:.0001pt; text-align:center; padding:0cm 5.4pt 0cm 5.4pt"><span style="line-height:normal"><span lang="EN-US" style="font-family:">false</span></span></p>  
Строка 173: Строка 198:
  
 
<span style="font-family:"><span style="color:black">Пример:</span></span>
 
<span style="font-family:"><span style="color:black">Пример:</span></span>
<syntaxhighlight lang="Javascript">ModAPI.addAPICallback("AchievementsAPI", function (api) {
+
<pre>AchievementAPI.register("somethingGroup", {
    api.AchievementAPI.register("somethingGroup", {
+
    unique: "one",
        unique: "one",
+
    name: {
        name: {
+
        text: "Minecraft",
        text: "Minecraft",
+
        translate: "achievements.story.root.title"
            translate: "achievements.story.root.title"
+
    },
        },
+
    description: {
        description: {
+
        text: "The heart and story of the game",
            text: "The heart and story of the game",
+
        translate: "achievements.story.root.description"
            translate: "achievements.story.root.description"
+
    },
        },
+
    column: 1,
        column: 1,
+
    row: 2,
        row: 2,
+
    item: {
        item: {
+
        id: 2
            id: 2
+
    }
        }
+
});
    });
+
 
        
+
AchievementAPI.register("somethingGroup", {
    api.AchievementAPI.register("somethingGroup", {
+
    unique: "two",
        unique: "two",
+
    name: {
        name: {
+
        text: "Stone Age",
            text: "Stone Age",
+
        translate: "achievements.story.mine_stone.title"
            translate: "achievements.story.mine_stone.title"
+
    },
        },
+
    description: {
        description: {
+
        text: "Mine stone with your new pickaxe",
            text: "Mine stone with your new pickaxe",
+
        translate: "achievements.story.mine_stone.description"
            translate: "achievements.story.mine_stone.description"
+
    },
        },
+
    parent: {
        parent: {
+
        unique: "one"
            unique: "one"
+
    },
        },
+
    column: 2,
        column: 2,
+
    row: 3,
        row: 3,
+
    item: {
        item: {
+
        id: 270
            id: 270
+
    }
        }
+
});</pre>
    });
 
});</syntaxhighlight>
 
  
 
<span style="font-family:"><span style="color:black">Для выдачи достижений используется метод&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">give</span></span>''<span style="font-family:"><span style="color:black">(</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">groupUnique</span></span>'''<span style="font-family:"><span style="color:black">,</span></span>'''<span lang="EN-US" style="font-family:"><span style="color:black">unique</span></span>''<span style="font-family:"><span style="color:black">). Если задано поле&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">progressMax</span></span>''<span style="font-family:"><span style="color:black">, то при вызове методы специальный счетчик будет увеличиваться на единицу, пока не будет равен значение максимального прогресса, после чего достижение будет выдано. В противном случае это произойдёт сразу.</span></span>
 
<span style="font-family:"><span style="color:black">Для выдачи достижений используется метод&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">give</span></span>''<span style="font-family:"><span style="color:black">(</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">groupUnique</span></span>'''<span style="font-family:"><span style="color:black">,</span></span>'''<span lang="EN-US" style="font-family:"><span style="color:black">unique</span></span>''<span style="font-family:"><span style="color:black">). Если задано поле&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">progressMax</span></span>''<span style="font-family:"><span style="color:black">, то при вызове методы специальный счетчик будет увеличиваться на единицу, пока не будет равен значение максимального прогресса, после чего достижение будет выдано. В противном случае это произойдёт сразу.</span></span>
  
<span style="font-family:"><span style="color:black">Предусмотрена возможность сохранения информации о ходе выполнения достижения. Для этого необходимо вызвать метод&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">getData</span></span>''<span style="font-family:"><span style="color:black">(</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">groupUnique</span></span>'''<span style="font-family:"><span style="color:black">,</span></span>'''<span lang="EN-US" style="font-family:"><span style="color:black">unique</span></span>''<span lang="EN-US" style="font-family:">),</span>'''<span style="font-family:"><span style="color:black">&nbsp;</span></span>'''<span style="font-family:"><span style="color:black">который возвращает объект. В него вы можете сохранять какую-либо произвольную информацию. Пример, демонстрирующий эту функциональность:</span></span>
+
<span style="font-family:"><span style="color:black">Предусмотрена возможность сохранения информации о ходе выполнения достижения. Для этого необходимо вызвать метод&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">getData</span></span>''<span style="font-family:"><span style="color:black">(</span></span><span lang="EN-US" style="font-family:">),</span>'''<span style="font-family:"><span style="color:black">&nbsp;</span></span>'''<span style="font-family:"><span style="color:black">который возвращает объект. В него вы можете сохранять какую-либо произвольную информацию. Пример, демонстрирующий эту функциональность:</span></span>
<syntaxhighlight lang="Javascript">Callback.addCallback("ItemUse", function (coords, item, block) {
+
<pre>Callback.addCallback("ItemUse", function (coords, item) {
    let data = AchievementAPI.getData("somethingGroup", "achievement");
+
    let data = AchievementAPI.getGroup("somethingGroup").getChild("achievement").getData();
 
+
   
    if (!data[item.id]) {
+
    if (!data[item.id]) {
        data[item.id] = true;
+
        data[item.id] = true;
        AchievementAPI.give("somethingGroup", "achievement")
+
        AchievementAPI.give("somethingGroup", "achievement")
    }
+
    }
});</syntaxhighlight>
+
});</pre>
  
 
<span style="font-family:"><span style="color:black">Нам необходимо использовать разные предметы&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">progressMax</span></span>'' <span style="font-family:"><span style="color:black">раз, чтобы выполнить достижение.</span></span>
 
<span style="font-family:"><span style="color:black">Нам необходимо использовать разные предметы&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">progressMax</span></span>'' <span style="font-family:"><span style="color:black">раз, чтобы выполнить достижение.</span></span>
  
<span style="font-family:"><span style="color:black">Существует метод&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">loadFrom</span></span>''<span style="font-family:"><span style="color:black">(</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">path</span></span>''<span lang="EN-US" style="font-family:">)</span>'''<span style="font-family:"><span style="color:black">,</span></span>'''<span style="font-family:"><span style="color:black">который загружает информацию из&nbsp;</span></span><span lang="EN-US" style="font-family:"><span style="color:black">JSON</span></span> <span style="font-family:"><span style="color:black">файла. В нём могут находиться две секции –&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">groups</span></span>''<span style="font-family:"><span style="color:black">,&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">achievements</span></span>''<span style="font-family:"><span style="color:black">. Первая – массив для объектов, описывающих группы достижений, другая – объект, который хранит массивы из достижений. Ключом служит идентификатор группы. Пример такого файла</span></span><span lang="EN-US" style="font-family:"><span style="color:black">:</span></span>
+
<span style="font-family:"><span style="color:black">Существует метод&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">loadFrom</span></span>''<span style="font-family:"><span style="color:black">(</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">path</span></span>''<span lang="EN-US" style="font-family:">)</span>'''<span style="font-family:"><span style="color:black">,&nbsp;</span></span>'''<span style="font-family:"><span style="color:black">который загружает информацию из&nbsp;</span></span><span lang="EN-US" style="font-family:"><span style="color:black">JSON</span></span> <span style="font-family:"><span style="color:black">файла. В нём могут находиться две секции –&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">groups</span></span>''<span style="font-family:"><span style="color:black">,&nbsp;</span></span>''<span lang="EN-US" style="font-family:"><span style="color:black">achievements</span></span>''<span style="font-family:"><span style="color:black">. Первая – массив для объектов, описывающих группы достижений, другая – объект, который хранит массивы из достижений. Ключом служит идентификатор группы. Пример такого файла</span></span><span lang="EN-US" style="font-family:"><span style="color:black">:</span></span>
 
<syntaxhighlight lang="Json">{
 
<syntaxhighlight lang="Json">{
 
    "groups": [
 
    "groups": [
Строка 287: Строка 310:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
</div> </div> </div> </div> </div> </div> </div> </div>
== '''<span style="font-size:14.0pt"><span style="line-height:115%"><span style="font-family:">Крафты</span></span></span>''' ==
 
 
 
<span style="font-family:">Модификация перезаписывает крафты следующих ванильных предметов:&nbsp; алмазный нагрудник, железная и каменная кирки. Если вы также изменяется один из перечисленных рецептов, необходимо в функцию крафта добавить выдачу соответствующего достижения.</span>
 
</div> </div> </div>
 

Текущая версия на 13:36, 20 июля 2020

AchievementsAPI – библиотека для создания достижений. В ней содержаться два модуля: AchievementsPopup и AcvievementsAPI. Здесь описаны основные их возможности. Больше информации вы можете узнать в виде комментариев в коде библиотеки.

Загрузка[править]

Версия Ссылка Список изменений Дата релиза
1 Скачать   20.07.20
0 Скачать Первая версия 13.07.20

Условия использования[править]

  • Запрещено распространение библиотеки на сторонних источниках без ссылки на официальное сообщество(https://vk.com/forestry_pe)
  • Запрещено изменение кода библиотеки
  • Запрещено явное копирование кода в другие библиотеки или моды
  • Используя библиотеку вы автоматически соглашаетесь с описанными выше условиями

AchievementPopup[править]

Данный модуль позволяет создавать кастомные уведомления. Для этого существует метод show. Он добавляет уведомление в очередь на показ, из которой они последовательно показываются. Принимает объект со следующими полями: 
 

Название

Описание

Значение по умолчанию

title

Заголовок

 

color

Цвет заголовка

android.graphics.Color.YELLOW

description

Описание. Текст под заголовком

 

item

Иконка, задаваемая предметом

id – 0

data – 0

count – 1

delay

Кол-во тиков, которые уведомление будет находиться на экране

80


Пример использования:

Callback.addCallback("ItemUse", function () {
    AchievementPopup.show({
        title: "Title",
        description: "And description",
        item: {
            id: 264,
            data: 0,
            count: 1
        }
    });
});

AchievementAPI[править]

В AchievementAPI представлен основной функционал мода - создание достижений.  Но для начала необходимо создать группу, в которой они будут находиться, используя registerGroup(obj),где obj – объект, описывающий группу. Все поля, которые он может содержать, описаны в таблице, приведённой далее.
 

Название

Описание

Значение по умолчанию

unique

Уникальный идентификатор группы

Обязательное поле

name

Название группы. Отображается в левом нижнем углу окна просмотра достижений

 

width

Размер области, в которой отображаются достижения по ширине и высоте соответственно

600

height

250

size

Размер достижений в области

100

bgTexture

Название текстуры в директориях ресурсов для гпи, которая используется в качестве фона области достижений. Данное изображение маштабируется до 50 пикселей и дублируется по ширине и высоте. Рекомендуемый размер – 16x16 пикселей

 

icon

Иконка группы, задаваемая предметом. Отображается в левом нижнем углу окна просмотра достижений

id – 0
data -0

Пример:

AchievementAPI.registerGroup({
    unique: "vanilla",
    name: "Vanilla",
    width: 600,
    height: 250,
    size: 100,
    bgTexture: "end",
    icon: {
        id: 1
    }
});

Для регистрации самих достижений используется метод register(groupUnique,obj),где groupUnique – идентификатор группы, obj – объект, описывающий достижений. Для указания значения первого поля можно использовать как созданную вами, так и из сторонних модов.
ВНИМАНИЕ! Группа должна быть зарегистрирована до создания достижений для неё!

В таблице приведены возможные поля объекта.

Название

Описание

Значение по умолчанию

unique

Уникальный идентификатор достижения в текущей группе. В разных группах они могут повторяться.

Обязательное поле

name

Объект, задающий название/описание достижения, который может содержать поля translateи text. Первое указывает строку, которая будет локализована, если это не удалось или она не задана, будет использоваться text.

 

description

column

Один из способов размещения достижений – позиционирование по сетке.

 

row

x

Размещение достижений с явным указанием координат. Имеет больший приоритет, чем выравнивание по сетке, если заданы оба варианта.

 

y

parent

Задаёт родителя достижения. Данный объект может содержать unique, идентификатор родительского достижения, и groupUnique, группа, в которой оно находится. Если groupUnique не задано, поиск родителя будет осуществляться в пределах текущей группы и, если это завершилось успехом, они будут соединены линией. РОДИТЕЛЬСКОЕ ДОСТИЖЕНИЕ ДОЛЖНО БЫТЬ ЗАРЕГИСТРИРОВАНО РАНЬШЕ ДОЧЕРНЕГО!

 

strongDependence

Если значение – истина, достижение не будет отображаться, пока не выполнен родитель.

false

type

Тип достижения. Влияет на форму рамки и заголовок уведомления при выполнении. Существует три стандартных – default','challengeи goal. Для создания кастомной рамки необходимо в директории ресурсов для гпи создать папку achievement_bg и поместить в неё текстуры со следующими суффиксами: _completed', _'locked', _'unlocked. Для выполненных, заблокированных (родитель не выполнен),разблокированных достижений соответственно.

default

progressMax

Максимальный прогресс выполнения достижения. Предназначение поля будет описано ниже.

 

notCompletePopup

Если истина, уведомление о выполнении достижения показываться не будет.

false

item

Иконка достижения, задаваемая предметом.

id– 0
data– 0

Пример:

AchievementAPI.register("somethingGroup", {
    unique: "one",
    name: {
        text: "Minecraft",
        translate: "achievements.story.root.title"
    },
    description: {
        text: "The heart and story of the game",
        translate: "achievements.story.root.description"
    },
    column: 1,
    row: 2,
    item: {
        id: 2
    }
});

AchievementAPI.register("somethingGroup", {
    unique: "two",
    name: {
        text: "Stone Age",
        translate: "achievements.story.mine_stone.title"
    },
    description: {
        text: "Mine stone with your new pickaxe",
        translate: "achievements.story.mine_stone.description"
    },
    parent: {
        unique: "one"
    },
    column: 2,
    row: 3,
    item: {
        id: 270
    }
});

Для выдачи достижений используется метод give(groupUnique,unique). Если задано поле progressMax, то при вызове методы специальный счетчик будет увеличиваться на единицу, пока не будет равен значение максимального прогресса, после чего достижение будет выдано. В противном случае это произойдёт сразу.

Предусмотрена возможность сохранения информации о ходе выполнения достижения. Для этого необходимо вызвать метод getData(), который возвращает объект. В него вы можете сохранять какую-либо произвольную информацию. Пример, демонстрирующий эту функциональность:

Callback.addCallback("ItemUse", function (coords, item) {
    let data = AchievementAPI.getGroup("somethingGroup").getChild("achievement").getData();
    
    if (!data[item.id]) {
        data[item.id] = true;
        AchievementAPI.give("somethingGroup", "achievement")
    }
});

Нам необходимо использовать разные предметы progressMax раз, чтобы выполнить достижение.

Существует метод loadFrom(path)который загружает информацию из JSON файла. В нём могут находиться две секции – groupsachievements. Первая – массив для объектов, описывающих группы достижений, другая – объект, который хранит массивы из достижений. Ключом служит идентификатор группы. Пример такого файла:

{
    "groups": [
        {
            "unique": "vanilla",
            "name": "Vanilla",
            "width": 600,
            "height": 250,
            "size": 100,
            "bgTexture": "end",
            "icon": {
                "id": 1
            }
        },
        {
            "unique": "vanilla2",
            "name": "Vanilla2",
            "bgTexture": "nether",
                "icon": {
                "id": 264
            }
        }
    ],
    "achievements": {
        "vanilla": [
            {
                "unique": "one",
                "name": {
                    "text": "Minecraft",
                    "translate": "achievements.story.root.title"
                },
                "description": {
                    "text": "The heart and story of the game",
                    "translate": "achievements.story.root.description"
                },
                "column": 1,
                "row": 2,
                "item": {
                    "id": 2
                }
            }
        ],
        "vanilla2": [
            {
                "unique": "wwww23",
                "name": "test",
                "column": 1,
                "row": 2,
                "type": "challenge",
                "parent": {
                    "unique": "rrr23",
                    "groupUnique": "vanilla"
                },
                "item": {
                    "id": 4
                }
            }
        ]
    }
}