123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 |
- event.load("living_pickup");
- event.load("pre_craft");
- event.load("craft");
- event.load("player_join");
- event.load("snuvi_click");
- prefix_challenge = "§aChallenge";
- challenge_short = "aitems";
- challenge_name = "All Items";
- reward = 32768;
- sb_id = 12;
- lore_list = list.new();
- list.add(lore_list, text.new("Collect all items in the given order."));
- list.add(lore_list, text.new(string.concat("§fReward: ", money.getString(reward), " + 4 Amber")));
- list.add(lore_list, text.new(""));
- list.add(lore_list, text.new("§aLeftclick §f= §eStart challenge"));
- list.add(lore_list, text.new("§cRightclick §f= §eCancel challenge"));
- aitems = item.create("CHEST_MINECART", 1, "§cAll Items", lore_list);
- next_items = map.new(); //player_id -> material
- done_items = map.new(); //player_id -> set -> material
- todo_items = map.new(); //player_id -> list -> material
- sound = sound.get("minecraft:entity.experience_orb.pickup");
- category = sound.getCategory("MASTER");
-
- a = material.getAll();
- mat_list = list.new();
- for(i = 0; i < array.getSize(a); i++) {
- mat = a[i];
- if(material.isItem(mat)) {
- list.add(mat_list, mat);
- }
- }
- list.remove(mat_list, material.get("DRAGON_EGG"));
- list.remove(mat_list, material.get("AXOLOTL_SPAWN_EGG"));
- list.remove(mat_list, material.get("BAT_SPAWN_EGG"));
- list.remove(mat_list, material.get("BEE_SPAWN_EGG"));
- list.remove(mat_list, material.get("BLAZE_SPAWN_EGG"));
- list.remove(mat_list, material.get("CAT_SPAWN_EGG"));
- list.remove(mat_list, material.get("CAVE_SPIDER_SPAWN_EGG"));
- list.remove(mat_list, material.get("CHICKEN_SPAWN_EGG"));
- list.remove(mat_list, material.get("COD_SPAWN_EGG"));
- list.remove(mat_list, material.get("COW_SPAWN_EGG"));
- list.remove(mat_list, material.get("CREEPER_SPAWN_EGG"));
- list.remove(mat_list, material.get("DOLPHIN_SPAWN_EGG"));
- list.remove(mat_list, material.get("DONKEY_SPAWN_EGG"));
- list.remove(mat_list, material.get("DROWNED_SPAWN_EGG"));
- list.remove(mat_list, material.get("ELDER_GUARDIAN_SPAWN_EGG"));
- list.remove(mat_list, material.get("ENDERMAN_SPAWN_EGG"));
- list.remove(mat_list, material.get("ENDERMITE_SPAWN_EGG"));
- list.remove(mat_list, material.get("EVOKER_SPAWN_EGG"));
- list.remove(mat_list, material.get("FOX_SPAWN_EGG"));
- list.remove(mat_list, material.get("GHAST_SPAWN_EGG"));
- list.remove(mat_list, material.get("GLOW_SQUID_SPAWN_EGG"));
- list.remove(mat_list, material.get("GOAT_SPAWN_EGG"));
- list.remove(mat_list, material.get("GUARDIAN_SPAWN_EGG"));
- list.remove(mat_list, material.get("HOGLIN_SPAWN_EGG"));
- list.remove(mat_list, material.get("HORSE_SPAWN_EGG"));
- list.remove(mat_list, material.get("HUSK_SPAWN_EGG"));
- list.remove(mat_list, material.get("LLAMA_SPAWN_EGG"));
- list.remove(mat_list, material.get("MAGMA_CUBE_SPAWN_EGG"));
- list.remove(mat_list, material.get("MOOSHROOM_SPAWN_EGG"));
- list.remove(mat_list, material.get("MULE_SPAWN_EGG"));
- list.remove(mat_list, material.get("OCELOT_SPAWN_EGG"));
- list.remove(mat_list, material.get("PANDA_SPAWN_EGG"));
- list.remove(mat_list, material.get("PARROT_SPAWN_EGG"));
- list.remove(mat_list, material.get("PHANTOM_SPAWN_EGG"));
- list.remove(mat_list, material.get("PIG_SPAWN_EGG"));
- list.remove(mat_list, material.get("PIGLIN_SPAWN_EGG"));
- list.remove(mat_list, material.get("PIGLIN_BRUTE_SPAWN_EGG"));
- list.remove(mat_list, material.get("PILLAGER_SPAWN_EGG"));
- list.remove(mat_list, material.get("POLAR_BEAR_SPAWN_EGG"));
- list.remove(mat_list, material.get("PUFFERFISH_SPAWN_EGG"));
- list.remove(mat_list, material.get("RABBIT_SPAWN_EGG"));
- list.remove(mat_list, material.get("RAVAGER_SPAWN_EGG"));
- list.remove(mat_list, material.get("SALMON_SPAWN_EGG"));
- list.remove(mat_list, material.get("SHEEP_SPAWN_EGG"));
- list.remove(mat_list, material.get("SHULKER_SPAWN_EGG"));
- list.remove(mat_list, material.get("SILVERFISH_SPAWN_EGG"));
- list.remove(mat_list, material.get("SKELETON_SPAWN_EGG"));
- list.remove(mat_list, material.get("SKELETON_HORSE_SPAWN_EGG"));
- list.remove(mat_list, material.get("SLIME_SPAWN_EGG"));
- list.remove(mat_list, material.get("SPIDER_SPAWN_EGG"));
- list.remove(mat_list, material.get("SQUID_SPAWN_EGG"));
- list.remove(mat_list, material.get("STRAY_SPAWN_EGG"));
- list.remove(mat_list, material.get("STRIDER_SPAWN_EGG"));
- list.remove(mat_list, material.get("TRADER_LLAMA_SPAWN_EGG"));
- list.remove(mat_list, material.get("TROPICAL_FISH_SPAWN_EGG"));
- list.remove(mat_list, material.get("TURTLE_SPAWN_EGG"));
- list.remove(mat_list, material.get("VEX_SPAWN_EGG"));
- list.remove(mat_list, material.get("VILLAGER_SPAWN_EGG"));
- list.remove(mat_list, material.get("VINDICATOR_SPAWN_EGG"));
- list.remove(mat_list, material.get("WANDERING_TRADER_SPAWN_EGG"));
- list.remove(mat_list, material.get("WITCH_SPAWN_EGG"));
- list.remove(mat_list, material.get("WITHER_SKELETON_SPAWN_EGG"));
- list.remove(mat_list, material.get("WOLF_SPAWN_EGG"));
- list.remove(mat_list, material.get("ZOGLIN_SPAWN_EGG"));
- list.remove(mat_list, material.get("ZOMBIE_SPAWN_EGG"));
- list.remove(mat_list, material.get("ZOMBIE_HORSE_SPAWN_EGG"));
- list.remove(mat_list, material.get("ZOMBIE_VILLAGER_SPAWN_EGG"));
- list.remove(mat_list, material.get("ZOMBIFIED_PIGLIN_SPAWN_EGG"));
- list.remove(mat_list, material.get("BARRIER"));
- list.remove(mat_list, material.get("SPAWNER"));
- list.remove(mat_list, material.get("END_PORTAL_FRAME"));
- list.remove(mat_list, material.get("END_PORTAL"));
- list.remove(mat_list, material.get("NETHER_PORTAL"));
- list.remove(mat_list, material.get("FARMLAND"));
- list.remove(mat_list, material.get("INFESTED_STONE"));
- list.remove(mat_list, material.get("INFESTED_COBBLESTONE"));
- list.remove(mat_list, material.get("INFESTED_STONE_BRICKS"));
- list.remove(mat_list, material.get("INFESTED_MOSSY_STONE_BRICKS"));
- list.remove(mat_list, material.get("INFESTED_CRACKED_STONE_BRICKS"));
- list.remove(mat_list, material.get("INFESTED_CHISELED_STONE_BRICKS"));
- list.remove(mat_list, material.get("INFESTED_DEEPSLATE"));
- list.remove(mat_list, material.get("AIR"));
- list.remove(mat_list, material.get("BEDROCK"));
- list.remove(mat_list, material.get("BUDDING_AMETHYST"));
- list.remove(mat_list, material.get("PETRIFIED_OAK_SLAB"));
- list.remove(mat_list, material.get("CHORUS_PLANT"));
- list.remove(mat_list, material.get("DIRT_PATH"));
- list.remove(mat_list, material.get("TALL_GRASS"));
- list.remove(mat_list, material.get("LARGE_FERN"));
- list.remove(mat_list, material.get("REPEATING_COMMAND_BLOCK"));
- list.remove(mat_list, material.get("CHAIN_COMMAND_BLOCK"));
- list.remove(mat_list, material.get("STRUCTURE_VOID"));
- list.remove(mat_list, material.get("SCULK_SENSOR"));
- list.remove(mat_list, material.get("JIGSAW"));
- list.remove(mat_list, material.get("BUNDLE"));
- list.remove(mat_list, material.get("PLAYER_HEAD"));
- list.remove(mat_list, material.get("COMMAND_BLOCK_MINECART"));
- list.remove(mat_list, material.get("DEBUG_STICK"));
- list.remove(mat_list, material.get("COMMAND_BLOCK"));
- list.remove(mat_list, material.get("LIGHT"));
- list.remove(mat_list, material.get("STRUCTURE_BLOCK"));
- all_stages = list.getSize(mat_list);
- online_list = players.toList();
- iter = iterator(online_list);
- while(hasNext(iter)) {
- p = next(iter);
- if(challenge.playerHas(p, challenge_short)) {
- stage = loadDoneItems(p);
- type = loadNextItem(p);
- challenge.display(p, sb_id, challenge_name, type, stage, all_stages);
- }
- }
- msg.string("dev", "§bAllItems §rloaded.");
- @wait
- wait();
- ignoreGoto(event);
- goto("wait");
- @player_join
- if(!challenge.playerHas(player, challenge_short)) {
- goto("wait");
- }
- stage = loadDoneItems(player);
- type = loadNextItem(player);
- challenge.display(player, sb_id, challenge_name, type, stage, all_stages);
- goto("wait");
- @snuvi_click
- item = inv.getItem(inv, inv_slot);
- item.removeFlag(item, "HIDE_DESTROYS");
- title_string = string.text(inv_title);
- if(item == aitems) {
- if(click == "LEFT") {
- if(challenge.playerHas(player, challenge_short)) {
- msg.prefix(player, prefix_challenge, "You already started this challenge.");
- goto("wait");
- }
- player_id = player.getId(player);
- map.add(todo_items, player_id, list.copy(mat_list));
- map.add(done_items, player_id, set.new());
- player.addChallenge(player, challenge_short);
- type = getRandomType(player);
- stage = setNextItem(player, type);
- challenge.display(player, sb_id, challenge_name, type, stage, all_stages);
- msg.string(player, string.getSpacer());
- msg.prefix(player, prefix_challenge, "Challenge started.");
- msg.prefix(player, prefix_challenge, "Crafted and picked up items will count.");
- msg.prefix(player, prefix_challenge, "§cCounted items will be deleted!");
- goto("wait");
- }
- if(click == "RIGHT") {
- if(!challenge.playerHas(player, challenge_short)) {
- msg.prefix(player, prefix_challenge, "Challenge not active.");
- goto("wait");
- }
- resetAItems(player);
- challenge.removeDisplay(player, sb_id);
- player.removeChallenge(player, challenge_short);
- msg.prefix(player, prefix_challenge, "Challenge canceled.");
- goto("wait");
- }
- goto("wait");
- }
- goto("wait");
- @pre_craft
- player = list.getIndex(players, 0);
- if(!challenge.playerHas(player, challenge_short)) {
- goto("wait");
- }
- my_inv = inv;
- goto("wait");
- @craft
- if(!challenge.playerHas(player, challenge_short)) {
- goto("wait");
- }
- player_loc = entity.getLocation(player);
- world_name = world.getName(loc.getWorld(player_loc));
- if(!world.isSurvName(world_name)) {
- goto("wait");
- }
- if(item == null) {
- goto("wait");
- }
- item_type = item.getType(item);
- if(!isNextItem(player, item_type)) {
- goto("wait");
- }
- item.setAmount(item, item.getAmount(item) - 1);
- inv.clear(my_inv);
- player.safeGiveItem(player, item);
- sound.spawnForPlayer(player, sound, category);
- new_type = getRandomType(player);
- if(new_type == null) {
- msg.prefix(player, prefix_challenge, "All items collected. Challenge done!");
- msg.prefix(player, prefix_challenge, string.concat("Reward: ", money.getString(reward)));
- money.add(player, reward);
- amber = customitem.getAmber();
- item.setAmount(amber, 4);
- player.giveItem(player, amber);
- resetAItems(player);
- challenge.removeDisplay(player, sb_id);
- player.removeChallenge(player, challenge_short);
- player.setAIChallengeAmounts(player, player.getAIChallengeAmounts(player) + 1);
- goto("wait");
- }
- saveDoneItems(player, item_type);
- stage = setNextItem(player, new_type);
- msg.prefix(player, prefix_challenge, string.concat("Item collected. Next item: ", new_type));
- challenge.display(player, sb_id, challenge_name, new_type, stage, all_stages);
- goto("wait");
- @living_pickup
- if(!isPlayer(living_entity)) {
- goto("wait");
- }
- player = living_entity;
- if(!challenge.playerHas(player, challenge_short)) {
- goto("wait");
- }
- player_loc = entity.getLocation(player);
- world_name = world.getName(loc.getWorld(player_loc));
- if(!world.isSurvName(world_name)) {
- goto("wait");
- }
- item = item.entity.get(item_entity);
- item_type = item.getType(item);
- if(!isNextItem(player, item_type)) {
- goto("wait");
- }
- item_amount = item.getAmount(item);
- if(item_amount > 1) {
- item.setAmount(item, item_amount - 1);
- item.entity.set(item_entity, item);
- } else {
- cancel = true;
- entity.remove(item_entity);
- }
- sound.spawnForPlayer(player, sound, category);
- new_type = getRandomType(player);
- if(new_type == null) {
- msg.prefix(player, prefix_challenge, "All items collected. Challenge done!");
- msg.prefix(player, prefix_challenge, string.concat("Reward: ", money.getString(reward)));
- money.add(player, reward);
- amber = customitem.getAmber();
- item.setAmount(amber, 4);
- player.giveItem(player, amber);
- resetAItems(player);
- challenge.removeDisplay(player, sb_id);
- player.removeChallenge(player, challenge_short);
- player.setAIChallengeAmounts(player, player.getAIChallengeAmounts(player) + 1);
- goto("wait");
- }
- saveDoneItems(player, item_type);
- stage = setNextItem(player, new_type);
- msg.prefix(player, prefix_challenge, string.concat("Item collected. Next item: ", new_type));
- challenge.display(player, sb_id, challenge_name, new_type, stage, all_stages);
- goto("wait");
- function getRandomType(player) {
- player_id = player.getId(player);
- l = map.get($todo_items, player_id);
- l_size = list.getSize(l);
- if(l_size == 0) {
- return null;
- }
- r = math.random(0, l_size - 1);
- return list.getIndex(l, r);
- }
- function isNextItem(player, item_type) {
- player_id = player.getId(player);
- next_type = map.get($next_items, player_id);
- return next_type == item_type;
- }
- function setNextItem(player_or_id, item_type) {
- player_id = player.getValidId(player_or_id);
- map.add($next_items, player_id, item_type);
- saveNextItem(player_or_id, item_type);
-
- l = map.get($todo_items, player_id);
- list.remove(l, item_type);
- return $all_stages - list.getSize(l) - 1;
- }
- function loadNextItem(player_or_id) {
- config = playerdata.getSurvival(player_or_id);
- player_id = player.getValidId(player_or_id);
- type = material.get(config.getString(config, "cha.aitems.next", "null"));
- map.add($next_items, player_id, type);
- l = map.get($todo_items, player_id);
- list.remove(l, type);
- return type;
- }
- function saveNextItem(player_or_id, item_type) {
- config = playerdata.getSurvival(player_or_id);
- config.set(config, "cha.aitems.next", string(item_type));
- config.saveAsync(config);
- }
- function loadDoneItems(player_or_id) {
- config = playerdata.getSurvival(player_or_id);
- string = config.getString(config, "cha.aitems.done", "");
- s = set.new();
- l = list.copy($mat_list);
- if(string != "") {
- a = string.split("%", string);
- for(i = 0; i < array.getSize(a); i++) {
- type = material.get(a[i]);
- set.add(s, type);
- list.remove(l, type);
- }
- }
- player_id = player.getValidId(player_or_id);
- map.add($done_items, player_id, s);
- map.add($todo_items, player_id, l);
- return set.getSize(map.get($done_items, player_id));
- }
- function saveDoneItems(player_or_id, item_type) {
- player_id = player.getValidId(player_or_id);
- s = map.get($done_items, player_id);
- set.add(s, item_type);
-
- config = playerdata.getSurvival(player_or_id);
- string = config.getString(config, "cha.aitems.done", "");
- item_type = string(item_type);
- if(string == "") {
- config.set(config, "cha.aitems.done", item_type);
- } else {
- config.set(config, "cha.aitems.done", string.concat(string, "%", item_type));
- }
- config.saveAsync(config);
- }
- function resetAItems(player_or_id) {
- config = playerdata.getSurvival(player_or_id);
- config.set(config, "cha.aitems.done", "");
- config.set(config, "cha.aitems.next", "");
- config.saveAsync(config);
- }
|