/* * This file is part of LanternServer, licensed under the MIT License (MIT). * * Copyright (c) LanternPowered <https://www.lanternpowered.org> * Copyright (c) SpongePowered <https://www.spongepowered.org> * Copyright (c) contributors * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the Software), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package org.lanternpowered.server.game.registry.type.statistic; import static com.google.common.base.Preconditions.checkArgument; import static org.lanternpowered.server.text.translation.TranslationHelper.tr; import com.google.common.base.Throwables; import org.lanternpowered.server.game.registry.AdditionalPluginCatalogRegistryModule; import org.lanternpowered.server.statistic.achievement.AchievementBuilder; import org.lanternpowered.server.statistic.achievement.LanternAchievement; import org.lanternpowered.server.statistic.achievement.LanternAchievementBuilder; import org.spongepowered.api.registry.util.RegistrationDependency; import org.spongepowered.api.statistic.achievement.Achievement; import org.spongepowered.api.statistic.achievement.Achievements; import java.lang.reflect.Method; @RegistrationDependency(StatisticRegistryModule.class) public final class AchievementRegistryModule extends AdditionalPluginCatalogRegistryModule<Achievement> { private static final AchievementRegistryModule INSTANCE = new AchievementRegistryModule(); public static AchievementRegistryModule get() { return INSTANCE; } private static final Method ADD_ACHIEVEMENT_CHILD; static { try { ADD_ACHIEVEMENT_CHILD = LanternAchievement.class.getDeclaredMethod("addChild", LanternAchievement.class); ADD_ACHIEVEMENT_CHILD.setAccessible(true); } catch (NoSuchMethodException e) { throw Throwables.propagate(e); } } private AchievementRegistryModule() { super(Achievements.class); } @Override protected void register(Achievement catalogType, boolean disallowInbuiltPluginIds) { internalRegister(catalogType, disallowInbuiltPluginIds); StatisticRegistryModule.get().internalRegister(catalogType, disallowInbuiltPluginIds); } void internalRegister(Achievement catalogType, boolean disallowInbuiltPluginIds) { super.register(catalogType, disallowInbuiltPluginIds); catalogType.getParent().ifPresent(parent -> { checkArgument(getById(parent.getId()).orElse(null) == parent, "The parent must be registered."); try { ADD_ACHIEVEMENT_CHILD.invoke(parent, catalogType); } catch (Exception e) { throw Throwables.propagate(e); } }); } @Override public void registerDefaults() { final Achievement openInventory = vanillaBuilder("openInventory") .build("minecraft", "open_inventory"); register(openInventory); final Achievement mineWood = vanillaBuilder("mineWood") .parent(openInventory) .build("minecraft", "mine_wood"); register(mineWood); final Achievement buildWorkbench = vanillaBuilder("buildWorkBench") .parent(mineWood) .build("minecraft", "build_work_bench"); register(buildWorkbench); final Achievement buildPickaxe = vanillaBuilder("buildPickaxe") .parent(buildWorkbench) .build("minecraft", "build_pickaxe"); register(buildPickaxe); final Achievement buildFurnace = vanillaBuilder("buildFurnace") .parent(buildPickaxe) .build("minecraft", "build_furnace"); register(buildFurnace); final Achievement acquireIron = vanillaBuilder("acquireIron") .parent(buildFurnace) .build("minecraft", "acquire_iron"); register(acquireIron); final Achievement buildHoe = vanillaBuilder("buildHoe") .parent(buildWorkbench) .build("minecraft", "build_hoe"); register(buildHoe); final Achievement makeBread = vanillaBuilder("makeBread") .parent(buildHoe) .build("minecraft", "make_bread"); register(makeBread); final Achievement bakeCake = vanillaBuilder("bakeCake") .parent(buildHoe) .build("minecraft", "bake_cake"); register(bakeCake); final Achievement buildBetterPickaxe = vanillaBuilder("buildBetterPickaxe") .parent(buildHoe) .build("minecraft", "build_better_pickaxe"); register(buildBetterPickaxe); final Achievement cookFish = vanillaBuilder("cookFish") .parent(buildFurnace) .build("minecraft", "cook_fish"); register(cookFish); final Achievement onARail = vanillaBuilder("onARail") .parent(acquireIron) .build("minecraft", "on_a_rail"); register(onARail); final Achievement buildSword = vanillaBuilder("buildSword") .parent(buildWorkbench) .build("minecraft", "build_sword"); register(buildSword); final Achievement killEnemy = vanillaBuilder("killEnemy") .parent(buildSword) .build("minecraft", "kill_enemy"); register(killEnemy); final Achievement killCow = vanillaBuilder("killCow") .parent(buildSword) .build("minecraft", "kill_cow"); register(killCow); final Achievement flyPig = vanillaBuilder("flyPig") .parent(killCow) .build("minecraft", "fly_pig"); register(flyPig); final Achievement snipeSkeleton = vanillaBuilder("snipeSkeleton") .parent(killEnemy) .build("minecraft", "snipe_skeleton"); register(snipeSkeleton); final Achievement diamonds = vanillaBuilder("diamonds") .parent(acquireIron) .build("minecraft", "diamonds"); register(diamonds); final Achievement diamondsToYou = vanillaBuilder("diamondsToYou") .parent(diamonds) .build("minecraft", "diamonds_to_you"); register(diamondsToYou); final Achievement portal = vanillaBuilder("portal") .parent(diamonds) .build("minecraft", "portal"); register(portal); final Achievement ghast = vanillaBuilder("ghast") .parent(portal) .build("minecraft", "ghast"); register(ghast); final Achievement blazeRod = vanillaBuilder("blazeRod") .parent(portal) .build("minecraft", "blaze_rod"); register(blazeRod); final Achievement potion = vanillaBuilder("potion") .parent(blazeRod) .build("minecraft", "potion"); register(potion); final Achievement endPortal = vanillaBuilder("theEnd") .parent(blazeRod) .build("minecraft", "the_end"); register(endPortal); final Achievement theEnd = vanillaBuilder("theEnd2") .parent(endPortal) .build("minecraft", "the_end2"); register(theEnd); final Achievement enchantments = vanillaBuilder("enchantments") .parent(diamonds) .build("minecraft", "enchantments"); register(enchantments); final Achievement overkill = vanillaBuilder("overkill") .parent(enchantments) .build("minecraft", "overkill"); register(overkill); final Achievement bookcase = vanillaBuilder("bookcase") .parent(enchantments) .build("minecraft", "bookcase"); register(bookcase); final Achievement breedCow = vanillaBuilder("breedCow") .parent(killCow) .build("minecraft", "breed_cow"); register(breedCow); final Achievement spawnWither = vanillaBuilder("spawnWither") .parent(theEnd) .build("minecraft", "spawn_wither"); register(spawnWither); final Achievement killWither = vanillaBuilder("killWither") .parent(spawnWither) .build("minecraft", "kill_wither"); register(killWither); final Achievement fullBeacon = vanillaBuilder("fullBeacon") .parent(killWither) .build("minecraft", "full_beacon"); register(fullBeacon); final Achievement exploreAllBiomes = vanillaBuilder("exploreAllBiomes") .parent(endPortal) .build("minecraft", "explore_all_biomes"); register(exploreAllBiomes); final Achievement overpowered = vanillaBuilder("overpowered") .parent(buildBetterPickaxe) .build("minecraft", "overpowered"); register(overpowered); } private AchievementBuilder vanillaBuilder(String unlocalizedName) { final String internalId = String.format("achievement.%s", unlocalizedName); return new LanternAchievementBuilder() .internalId(internalId) .translation(tr(internalId)) .description(tr("%s.desc", internalId)) .targetValue(1); } }