rua
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
__config() -> {
|
||||
'stay_loaded' -> true
|
||||
};
|
||||
__command() -> (
|
||||
run('gamemode spectator');
|
||||
run('execute at @s run tp @s ~ ~0.2 ~')
|
||||
)
|
||||
@@ -0,0 +1,193 @@
|
||||
// by shenjack
|
||||
// write at carpet 1.16.5 1.4.31 v210407
|
||||
// with carpet-extra-1.16.5-1.4.30
|
||||
// with carpet-tis-addition-mc1.16.4-1.15.0+build.492
|
||||
// with fabric-api-0.26.0+1.16 (because on server Api Version > 0.26 will cause bug)
|
||||
|
||||
global_version = '1.2.0';
|
||||
global_carpet_version = split('\\+v',system_info('scarpet_version'));
|
||||
global_require_carpet_version = ['1.4.30', 210407];
|
||||
global_filename = system_info('app_name');
|
||||
global_score_path = 'census/';
|
||||
|
||||
// debug级别
|
||||
global_debug_level = 2;
|
||||
// 0 -> show all message
|
||||
// 1 -> show most debug
|
||||
// 2 -> show all info
|
||||
// 3 -> show all warn
|
||||
// 4 -> show all error
|
||||
|
||||
global_score = {};
|
||||
global_player_name = [];
|
||||
// 分数相关初始化
|
||||
|
||||
__config() -> {
|
||||
'stay_loaded' -> true,
|
||||
'scope' -> 'global',
|
||||
// 'allow_command_conflicts' -> true,
|
||||
'legacy_command_type_support' -> true,
|
||||
'requires' -> {
|
||||
'minecraft' -> '>=1.16', // best at 1.16+ haven't test in 1.15.2 and 1.14.4
|
||||
'fabric-api' -> '>=0.26.0', // for some reason api left in 0.26.0
|
||||
'carpet' -> '>=1.4.31' // best at 1.4.31 because fix issue of read_file()
|
||||
},
|
||||
'commands' -> {
|
||||
'' -> 'help',
|
||||
'help' -> 'help',
|
||||
'reload' -> 'reload_script',
|
||||
'score load' -> 'load_scores',
|
||||
'score save' -> 'save_scores',
|
||||
'score print' -> 'print_scores',
|
||||
'debug level' -> ['debug_level', null],
|
||||
'debug level <debug_level>' -> 'debug_level',
|
||||
'debug add_mine <player> <block>' -> 'add_mine',
|
||||
},
|
||||
'arguments' -> {
|
||||
'player' -> {
|
||||
'type' -> 'players'
|
||||
},
|
||||
'block' -> {
|
||||
'type' -> 'string',
|
||||
},
|
||||
'debug_level' -> {
|
||||
'type' -> 'int',
|
||||
'min' -> 0,
|
||||
'max' -> 4,
|
||||
'suggest' -> [0, 1, 2, 3, 4]
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
__on_close() -> (
|
||||
// 保存一些debug信息
|
||||
debug_info = {'debug_level' -> global_debug_level};
|
||||
write_file('main', 'json', debug_info);
|
||||
// 保存分数
|
||||
save_scores();
|
||||
);
|
||||
|
||||
printl(message, level = 2, say = false, reply = true) -> (
|
||||
if(global_debug_level <= level,
|
||||
if(reply, print(message));
|
||||
if(say, run('say' + message)));
|
||||
);
|
||||
|
||||
debug_level(level) -> (
|
||||
if(level == null,
|
||||
print('目前DEBUG等级为: ' + global_debug_level);
|
||||
return(0));
|
||||
global_debug_level = level;
|
||||
print('DEBUG等级已经设置为: ' + global_debug_level);
|
||||
logger(type = 'info', 'DEBUG等级已经设置为: ' + global_debug_level);
|
||||
);
|
||||
|
||||
help() -> (
|
||||
print(format('y ' + '-'*10 + '帮助信息' + '-'*10));
|
||||
print(format('m 提醒:大部分信息都可以点击来执行相对应的命令,所以请小心点击', '^g 包括我! 点我来执行 /' + global_filename, '! /' + global_filename));
|
||||
print(format('e /' + global_filename + ' -> ', 'c 同 /' + global_filename + ' help'));
|
||||
print(format('e /' + global_filename + ' help -> ', 'c 显示这条帮助信息', '^g 你就在看着我呢!', '! /' + global_filename + ' help'));
|
||||
print(format('e /' + global_filename + ' reload -> ', 'c 重新加载script', '^g 获得成就:我重载我自己', '! /' + global_filename + ' reload'));
|
||||
print(format('e /' + global_filename + ' score load -> ', 'c 加载各项榜单', '^rub 警告:这会覆盖游戏内的现有数据(所以请自行输入命令)'));
|
||||
print(format('e /' + global_filename + ' score save -> ', 'c 保存各项榜单', '^ub 提醒:这会覆盖文件数据', '! /' + global_filename + ' score save'));
|
||||
print(format('e /' + global_filename + ' score print -> ', 'c 输出各项榜单数据', '^gs 吐槽一下,scarpet的字符串处理真的麻烦死了', '! /' + global_filename + ' score print'));
|
||||
print(format('e /' + global_filename + ' debug level -> ', 'c 显示DEBUG信息等级', '^g (没啥可吐槽的)', '! /' + global_filename + ' debug level'));
|
||||
print(format('e /' + global_filename + ' debug level <debug_level> -> ', 'c 设置DEBUG信息等级为<debug_level> ', '^g <debug_level> 为 0-4的正整数,默认为2', '?/' + global_filename + ' debug level '));
|
||||
// print(format('e /' + global_filename + ' xxx -> ', 'c xxx', '^g xxx', '! /' + global_filename + ' xxx'));
|
||||
print(format('y [系统信息]' + global_filename + ' 版本: ' + global_version));
|
||||
print(format('y [系统信息]' + global_filename + ' 文件名: ' + global_filename));
|
||||
print(format('y [插件信息]' + global_filename + ' 数据存储路径: ' + global_score_path));
|
||||
print(format('e 感谢 @Harvey_Husky 延皓 的支持! script中一部分源码就来自哈姥姥!', '^g 哈姥姥真好用(', '?https://gitee.com/harvey-husky/FZ-sDatapack'));
|
||||
);
|
||||
|
||||
reload_script() -> (
|
||||
print('script ' + global_filename + ' 重载中···');
|
||||
run(str('script load ' + global_filename));
|
||||
);
|
||||
|
||||
load_scores() -> (
|
||||
print('重新加载计分数据中···');
|
||||
global_score = {}; // 重置分数
|
||||
files = list_files(global_score_path, 'shared_json'); // 列出所有文件
|
||||
printl(files, 1, true, true); // DEBUG 输出
|
||||
for(files,
|
||||
data = read_file(_, 'shared_json'); // 获取文件内json
|
||||
name = split('/', _):1; // 获取文件名(玩家名称
|
||||
global_score:name = data; // 存储进计分表
|
||||
printl(data + '\n\n' + _, 1, false, true)); // DEBUG 输出
|
||||
);
|
||||
|
||||
print_scores() -> (
|
||||
// 目前只会输出挖掘榜
|
||||
printl(global_score, 0, false, true);
|
||||
print('§7' + '-'*10 + '挖掘榜' + '-'*10); // 输出标题
|
||||
mine = [];
|
||||
max_len = 1;
|
||||
// 初始化两个数据
|
||||
for(global_score,
|
||||
max_len = max(max_len, length(_));
|
||||
// 如果这个名字的长度大于之前的,就把最大长度换成这个名字的
|
||||
put(mine, 0, [_, global_score:_:'mine':'total'], 'insert'));
|
||||
// 把所有的数据加到mine里备用,等待排序
|
||||
mine = sort_key(mine, -_:1); // 根据每个挖掘数据的挖掘量进行排序(排序用的分数是挖掘量的倒数,这样可以倒序排列)
|
||||
printl(mine, 1, false, true);
|
||||
for(mine,
|
||||
print(format(' ' + _:0 + ': ' + ' '*(max_len-length(_:0))+ _:1 + ' block')));
|
||||
// 依次输出数据
|
||||
|
||||
);
|
||||
|
||||
save_scores() -> (
|
||||
print('计分数据保存中');
|
||||
for(global_score,
|
||||
write_file(global_score_path + _, 'shared_json', global_score:_);
|
||||
printl(_ + '\n' + global_score_path + _, 1, false, true));
|
||||
print('计分数据保存完毕');
|
||||
);
|
||||
|
||||
make_player_score(player) -> (
|
||||
score = {'mine'-> {'total'-> 0},
|
||||
'kill'-> {}}; // 基本信息
|
||||
put(global_score, player, score); // 加到列表里
|
||||
);
|
||||
|
||||
__on_player_dies(player) -> (
|
||||
pos = query(player, 'pos');
|
||||
dim = query(player, 'dimension');
|
||||
die_pos = str('[x: %d, y:%d, z:%d]', pos);
|
||||
if(dim == 'the_nether', dim = '地狱');
|
||||
if(dim == 'overworld', dim = '主世界');
|
||||
run(str('say ' + str(player) + '在' + dim + ' ' + die_pos + '死亡'));
|
||||
);
|
||||
|
||||
__on_player_breaks_block(player, block) -> (
|
||||
add_mine(player, block);
|
||||
);
|
||||
|
||||
add_mine(player, block) -> (
|
||||
block = str(block);
|
||||
splayer = player ~ 'name';
|
||||
if(!player(splayer),
|
||||
return());
|
||||
// 如果玩家列表里没有输入的玩家就返回
|
||||
if(!has(global_score:splayer),
|
||||
make_player_score(splayer));
|
||||
// 如果榜单里没有玩家就加入玩家的榜单
|
||||
if(!has(global_score:splayer:'mine', block),
|
||||
put(global_score:splayer:'mine':block, 1),
|
||||
// 如果玩家的记录里没有这个方块就把这个方块加到挖掘列表里
|
||||
score = get(global_score:splayer:'mine':block);
|
||||
put(global_score:splayer:'mine':block, score + 1));
|
||||
// 如果记录里有就 += 1
|
||||
full_score = get(global_score:splayer:'mine':'total');
|
||||
put(global_score:splayer:'mine':'total', full_score + 1);
|
||||
// print(global_score);
|
||||
);
|
||||
|
||||
// 加载debug信息
|
||||
debug_info = read_file('main', 'json');
|
||||
if(debug_info,
|
||||
global_debug_level = debug_info:'debug_level');
|
||||
// 基本信息初始化
|
||||
// 加载分数
|
||||
load_scores();
|
||||
@@ -0,0 +1,60 @@
|
||||
__config() -> {
|
||||
'stay_loaded' -> true,
|
||||
'commands' -> {
|
||||
'' -> 'my_pos',
|
||||
'<player>' -> 'print_pos'
|
||||
},
|
||||
'arguments' -> {
|
||||
'player' -> {
|
||||
'type' -> 'players'
|
||||
},
|
||||
}
|
||||
};
|
||||
__command() -> (
|
||||
s_player = player();
|
||||
pos = query(s_player, 'pos');
|
||||
dim = query(s_player, 'dimension');
|
||||
if(dim == 'overworld',
|
||||
(
|
||||
run(str('tellraw @a [{"selector": "@s"},{"text":"说: 我在主世界[x:%d, y:%d, z:%d, dim:overworld]","color": "aqua"}]',
|
||||
round(pos:0), round(pos:1), round(pos:2)
|
||||
));
|
||||
run(str('tellraw @a [{"text":"- 对应地狱: [x:%d, y:128, z:%d, dim:the_nether]","color": "aqua"}]',
|
||||
round((pos:0)/8), round((pos:2)/8)
|
||||
))
|
||||
),
|
||||
dim == 'the_nether',
|
||||
(
|
||||
run(str('tellraw @a [{"selector": "@s"},{"text":"说: 我在下界[x:%d, y:%d, z:%d, dim:the_nether]","color": "aqua"}]',
|
||||
round(pos:0), round(pos:1), round(pos:2)
|
||||
));
|
||||
run(str('tellraw @a [{"text":"- 对应主世界: [x:%d, y:64, z:%d, dim:overworld]","color": "aqua"}]',
|
||||
round((pos:0)*8), round((pos:2)*8)
|
||||
))
|
||||
),
|
||||
dim == 'the_end',
|
||||
(
|
||||
run(str('tellraw @a [{"selector": "@s"},{"text":"说: 我在末地[x:%d, y:%d, z:%d, dim:%s]","color": "aqua"}]',
|
||||
round(pos:0), round(pos:1), round(pos:2), dim
|
||||
))
|
||||
),
|
||||
run(str('tellraw @a [{"selector": "@s"},{"text":"说: 我在%s世界[x:%d, y:%d, z:%d, dim:%s]","color": "aqua"}]',
|
||||
dim, round(pos:0), round(pos:1), round(pos:2), dim
|
||||
))
|
||||
);
|
||||
exit()
|
||||
);
|
||||
|
||||
|
||||
print_pos(request_player) -> (
|
||||
name = request_player ~ 'name';
|
||||
pos = query(request_player, 'pos');
|
||||
dim = query(request_player, 'dimension');
|
||||
if(dim == 'overworld',
|
||||
o_dim = '主世界';
|
||||
run('say ' + name + ' 在主世界的 [x:' + pos:0 + ',y:' + pos:1 + ',z:' + pos:2 + ']向你说话'))
|
||||
);
|
||||
|
||||
my_pos() -> (
|
||||
print_pos(player())
|
||||
);
|
||||
@@ -0,0 +1,235 @@
|
||||
global_version = '1.4.1';
|
||||
__config() -> {
|
||||
'scope' -> 'global',
|
||||
'stay_loaded' -> false
|
||||
};
|
||||
__command() -> print('版本:' + global_version);
|
||||
global_bl = ['stone', 'granite', 'polished_granite', 'diorite', 'polished_diorite', 'andesite', 'polished_andesite', 'grass_block',
|
||||
'dirt', 'coarse_dirt', 'podzol', 'crimson_nylium', 'warped_nylium', 'cobblestone', 'oak_planks', 'spruce_planks', 'birch_planks',
|
||||
'jungle_planks', 'acacia_planks', 'dark_oak_planks', 'crimson_planks', 'warped_planks', 'sand', 'red_sand', 'gravel', 'gold_ore',
|
||||
'iron_ore', 'coal_ore', 'nether_gold_ore', 'oak_log', 'spruce_log', 'birch_log', 'jungle_log', 'acacia_log', 'dark_oak_log',
|
||||
'crimson_stem', 'warped_stem', 'stripped_oak_log', 'stripped_spruce_log', 'stripped_birch_log', 'stripped_jungle_log',
|
||||
'stripped_acacia_log', 'stripped_dark_oak_log', 'stripped_crimson_stem', 'stripped_warped_stem', 'stripped_oak_wood',
|
||||
'stripped_spruce_wood', 'stripped_birch_wood', 'stripped_jungle_wood', 'stripped_acacia_wood', 'stripped_dark_oak_wood',
|
||||
'stripped_crimson_hyphae', 'stripped_warped_hyphae', 'oak_wood', 'spruce_wood', 'birch_wood', 'jungle_wood', 'acacia_wood',
|
||||
'dark_oak_wood', 'crimson_hyphae', 'warped_hyphae', 'sponge', 'wet_sponge', 'glass', 'lapis_ore', 'lapis_block', 'sandstone',
|
||||
'chiseled_sandstone', 'cut_sandstone', 'white_wool', 'orange_wool', 'magenta_wool', 'light_blue_wool', 'yellow_wool',
|
||||
'lime_wool', 'pink_wool', 'gray_wool', 'light_gray_wool', 'cyan_wool', 'purple_wool', 'blue_wool', 'brown_wool', 'green_wool',
|
||||
'red_wool', 'black_wool', 'gold_block', 'iron_block', 'oak_slab', 'spruce_slab', 'birch_slab', 'jungle_slab', 'acacia_slab',
|
||||
'dark_oak_slab', 'crimson_slab', 'warped_slab', 'stone_slab', 'smooth_stone_slab', 'sandstone_slab', 'cut_sandstone_slab',
|
||||
'petrified_oak_slab', 'cobblestone_slab', 'brick_slab', 'stone_brick_slab', 'nether_brick_slab', 'quartz_slab',
|
||||
'red_sandstone_slab', 'cut_red_sandstone_slab', 'purpur_slab', 'prismarine_slab', 'prismarine_brick_slab',
|
||||
'dark_prismarine_slab', 'smooth_quartz', 'smooth_red_sandstone', 'smooth_sandstone', 'smooth_stone', 'bricks', 'bookshelf',
|
||||
'mossy_cobblestone', 'obsidian', 'purpur_block', 'purpur_pillar', 'purpur_stairs', 'oak_stairs', 'diamond_ore', 'diamond_block',
|
||||
'cobblestone_stairs', 'redstone_ore', 'ice', 'snow_block', 'clay', 'pumpkin', 'carved_pumpkin', 'netherrack', 'soul_sand',
|
||||
'soul_soil', 'basalt', 'polished_basalt', 'glowstone', 'jack_o_lantern', 'stone_bricks', 'mossy_stone_bricks',
|
||||
'cracked_stone_bricks', 'chiseled_stone_bricks', 'melon', 'brick_stairs', 'stone_brick_stairs', 'mycelium', 'nether_bricks',
|
||||
'cracked_nether_bricks', 'chiseled_nether_bricks', 'nether_brick_stairs', 'end_stone_bricks', 'sandstone_stairs', 'emerald_ore',
|
||||
'emerald_block', 'spruce_stairs', 'birch_stairs', 'jungle_stairs', 'crimson_stairs', 'warped_stairs', 'nether_quartz_ore',
|
||||
'chiseled_quartz_block', 'quartz_block', 'quartz_bricks', 'quartz_pillar', 'quartz_stairs', 'white_terracotta',
|
||||
'orange_terracotta', 'magenta_terracotta', 'light_blue_terracotta', 'yellow_terracotta', 'lime_terracotta', 'pink_terracotta',
|
||||
'gray_terracotta', 'light_gray_terracotta', 'cyan_terracotta', 'purple_terracotta', 'blue_terracotta', 'brown_terracotta',
|
||||
'green_terracotta', 'red_terracotta', 'black_terracotta', 'hay_block', 'terracotta', 'coal_block', 'packed_ice', 'acacia_stairs',
|
||||
'dark_oak_stairs', 'white_stained_glass', 'orange_stained_glass', 'magenta_stained_glass', 'light_blue_stained_glass',
|
||||
'yellow_stained_glass', 'lime_stained_glass', 'pink_stained_glass', 'gray_stained_glass', 'light_gray_stained_glass',
|
||||
'cyan_stained_glass', 'purple_stained_glass', 'blue_stained_glass', 'brown_stained_glass', 'green_stained_glass',
|
||||
'red_stained_glass', 'black_stained_glass', 'prismarine', 'prismarine_bricks', 'dark_prismarine', 'prismarine_stairs',
|
||||
'prismarine_brick_stairs', 'dark_prismarine_stairs', 'sea_lantern', 'red_sandstone', 'chiseled_red_sandstone',
|
||||
'cut_red_sandstone', 'red_sandstone_stairs', 'magma_block', 'nether_wart_block', 'warped_wart_block', 'red_nether_bricks',
|
||||
'bone_block', 'white_concrete', 'orange_concrete', 'magenta_concrete', 'light_blue_concrete', 'yellow_concrete', 'lime_concrete',
|
||||
'pink_concrete', 'gray_concrete', 'light_gray_concrete', 'cyan_concrete', 'purple_concrete', 'blue_concrete', 'brown_concrete',
|
||||
'green_concrete', 'red_concrete', 'black_concrete', 'white_concrete_powder', 'orange_concrete_powder', 'magenta_concrete_powder',
|
||||
'light_blue_concrete_powder', 'yellow_concrete_powder', 'lime_concrete_powder', 'pink_concrete_powder', 'gray_concrete_powder',
|
||||
'light_gray_concrete_powder', 'cyan_concrete_powder', 'purple_concrete_powder', 'blue_concrete_powder', 'brown_concrete_powder',
|
||||
'green_concrete_powder', 'red_concrete_powder', 'black_concrete_powder', 'dead_tube_coral_block', 'dead_brain_coral_block',
|
||||
'dead_bubble_coral_block', 'dead_fire_coral_block', 'dead_horn_coral_block', 'tube_coral_block', 'brain_coral_block',
|
||||
'bubble_coral_block', 'fire_coral_block', 'horn_coral_block', 'blue_ice', 'polished_granite_stairs',
|
||||
'smooth_red_sandstone_stairs', 'mossy_stone_brick_stairs', 'polished_diorite_stairs', 'mossy_cobblestone_stairs',
|
||||
'end_stone_brick_stairs', 'stone_stairs', 'smooth_sandstone_stairs', 'smooth_quartz_stairs', 'granite_stairs', 'andesite_stairs',
|
||||
'red_nether_brick_stairs', 'polished_andesite_stairs', 'diorite_stairs', 'polished_granite_slab', 'smooth_red_sandstone_slab',
|
||||
'mossy_stone_brick_slab', 'polished_diorite_slab', 'mossy_cobblestone_slab', 'end_stone_brick_slab', 'smooth_sandstone_slab',
|
||||
'smooth_quartz_slab', 'granite_slab', 'andesite_slab', 'red_nether_brick_slab', 'polished_andesite_slab', 'diorite_slab',
|
||||
'dried_kelp_block', 'netherite_block', 'ancient_debris', 'crying_obsidian', 'blackstone', 'blackstone_slab',
|
||||
'blackstone_stairs', 'gilded_blackstone', 'polished_blackstone', 'polished_blackstone_slab', 'polished_blackstone_stairs',
|
||||
'chiseled_polished_blackstone', 'polished_blackstone_bricks', 'polished_blackstone_brick_slab',
|
||||
'polished_blackstone_brick_stairs', 'cracked_polished_blackstone_bricks', 'oak_sapling', 'spruce_sapling', 'birch_sapling',
|
||||
'jungle_sapling', 'acacia_sapling', 'dark_oak_sapling', 'oak_leaves', 'spruce_leaves', 'birch_leaves', 'jungle_leaves',
|
||||
'acacia_leaves', 'dark_oak_leaves', 'cobweb', 'grass', 'fern', 'dead_bush', 'seagrass', 'sea_pickle', 'dandelion', 'poppy',
|
||||
'blue_orchid', 'allium', 'azure_bluet', 'red_tulip', 'orange_tulip', 'white_tulip', 'pink_tulip', 'oxeye_daisy', 'cornflower',
|
||||
'lily_of_the_valley', 'wither_rose', 'brown_mushroom', 'red_mushroom', 'crimson_fungus', 'warped_fungus', 'crimson_roots',
|
||||
'warped_roots', 'nether_sprouts', 'weeping_vines', 'twisting_vines', 'sugar_cane', 'kelp', 'bamboo', 'torch', 'end_rod',
|
||||
'chorus_plant', 'chorus_flower', 'chest', 'crafting_table', 'furnace', 'ladder', 'cactus', 'jukebox', 'oak_fence',
|
||||
'spruce_fence', 'birch_fence', 'jungle_fence', 'acacia_fence', 'dark_oak_fence', 'crimson_fence', 'warped_fence', 'soul_torch',
|
||||
'brown_mushroom_block', 'red_mushroom_block', 'mushroom_stem', 'iron_bars', 'chain', 'glass_pane', 'vine', 'lily_pad',
|
||||
'nether_brick_fence', 'enchanting_table', 'end_portal_frame', 'ender_chest', 'cobblestone_wall', 'mossy_cobblestone_wall',
|
||||
'brick_wall', 'prismarine_wall', 'red_sandstone_wall', 'mossy_stone_brick_wall', 'granite_wall', 'stone_brick_wall',
|
||||
'nether_brick_wall', 'andesite_wall', 'red_nether_brick_wall', 'sandstone_wall', 'end_stone_brick_wall', 'diorite_wall',
|
||||
'blackstone_wall', 'polished_blackstone_wall', 'polished_blackstone_brick_wall', 'anvil', 'chipped_anvil', 'damaged_anvil',
|
||||
'white_carpet', 'orange_carpet', 'magenta_carpet', 'light_blue_carpet', 'yellow_carpet', 'lime_carpet', 'pink_carpet',
|
||||
'gray_carpet', 'light_gray_carpet', 'cyan_carpet', 'purple_carpet', 'blue_carpet', 'brown_carpet', 'green_carpet', 'red_carpet',
|
||||
'black_carpet', 'slime_block', 'sunflower', 'lilac', 'rose_bush', 'peony', 'white_stained_glass_pane',
|
||||
'orange_stained_glass_pane', 'magenta_stained_glass_pane', 'light_blue_stained_glass_pane', 'yellow_stained_glass_pane',
|
||||
'lime_stained_glass_pane', 'pink_stained_glass_pane', 'gray_stained_glass_pane', 'light_gray_stained_glass_pane',
|
||||
'cyan_stained_glass_pane', 'purple_stained_glass_pane', 'blue_stained_glass_pane', 'brown_stained_glass_pane',
|
||||
'green_stained_glass_pane', 'red_stained_glass_pane', 'black_stained_glass_pane', 'shulker_box', 'white_shulker_box',
|
||||
'orange_shulker_box', 'magenta_shulker_box', 'light_blue_shulker_box', 'yellow_shulker_box', 'lime_shulker_box',
|
||||
'pink_shulker_box', 'gray_shulker_box', 'light_gray_shulker_box', 'cyan_shulker_box', 'purple_shulker_box', 'blue_shulker_box',
|
||||
'brown_shulker_box', 'green_shulker_box', 'red_shulker_box', 'black_shulker_box', 'white_glazed_terracotta',
|
||||
'orange_glazed_terracotta', 'magenta_glazed_terracotta', 'light_blue_glazed_terracotta', 'yellow_glazed_terracotta',
|
||||
'lime_glazed_terracotta', 'pink_glazed_terracotta', 'gray_glazed_terracotta', 'light_gray_glazed_terracotta',
|
||||
'cyan_glazed_terracotta', 'purple_glazed_terracotta', 'blue_glazed_terracotta', 'brown_glazed_terracotta',
|
||||
'green_glazed_terracotta', 'red_glazed_terracotta', 'black_glazed_terracotta', 'tube_coral', 'brain_coral', 'bubble_coral',
|
||||
'fire_coral', 'horn_coral', 'dead_brain_coral', 'dead_bubble_coral', 'dead_fire_coral', 'dead_horn_coral', 'dead_tube_coral',
|
||||
'tube_coral_fan', 'brain_coral_fan', 'bubble_coral_fan', 'fire_coral_fan', 'horn_coral_fan', 'dead_tube_coral_fan',
|
||||
'dead_brain_coral_fan', 'dead_bubble_coral_fan', 'dead_fire_coral_fan', 'dead_horn_coral_fan', 'scaffolding', 'oak_sign',
|
||||
'spruce_sign', 'birch_sign', 'jungle_sign', 'acacia_sign', 'dark_oak_sign', 'crimson_sign', 'warped_sign', 'white_bed',
|
||||
'orange_bed', 'magenta_bed', 'light_blue_bed', 'yellow_bed', 'lime_bed', 'pink_bed', 'gray_bed', 'light_gray_bed', 'cyan_bed',
|
||||
'purple_bed', 'blue_bed', 'brown_bed', 'green_bed', 'red_bed', 'black_bed', 'flower_pot', 'skeleton_skull',
|
||||
'wither_skeleton_skull', 'player_head', 'zombie_head', 'creeper_head', 'dragon_head', 'white_banner', 'orange_banner',
|
||||
'magenta_banner', 'light_blue_banner', 'yellow_banner', 'lime_banner', 'pink_banner', 'gray_banner', 'light_gray_banner',
|
||||
'cyan_banner', 'purple_banner', 'blue_banner', 'brown_banner', 'green_banner', 'red_banner', 'black_banner', 'loom', 'composter',
|
||||
'barrel', 'smoker', 'blast_furnace', 'cartography_table', 'fletching_table', 'grindstone', 'smithing_table', 'stonecutter',
|
||||
'bell', 'lantern', 'soul_lantern', 'campfire', 'soul_campfire', 'shroomlight', 'bee_nest', 'beehive', 'honey_block',
|
||||
'honeycomb_block', 'lodestone', 'respawn_anchor', 'dispenser', 'note_block', 'sticky_piston', 'piston', 'tnt', 'lever',
|
||||
'stone_pressure_plate', 'oak_pressure_plate', 'spruce_pressure_plate', 'birch_pressure_plate', 'jungle_pressure_plate',
|
||||
'acacia_pressure_plate', 'dark_oak_pressure_plate', 'crimson_pressure_plate', 'warped_pressure_plate',
|
||||
'polished_blackstone_pressure_plate', 'redstone_torch', 'oak_trapdoor', 'spruce_trapdoor', 'birch_trapdoor', 'jungle_trapdoor',
|
||||
'acacia_trapdoor', 'dark_oak_trapdoor', 'crimson_trapdoor', 'warped_trapdoor', 'oak_fence_gate', 'spruce_fence_gate',
|
||||
'birch_fence_gate', 'jungle_fence_gate', 'acacia_fence_gate', 'dark_oak_fence_gate', 'crimson_fence_gate', 'warped_fence_gate',
|
||||
'redstone_lamp', 'tripwire_hook', 'stone_button', 'oak_button', 'spruce_button', 'birch_button', 'jungle_button',
|
||||
'acacia_button', 'dark_oak_button', 'crimson_button', 'warped_button', 'polished_blackstone_button', 'trapped_chest',
|
||||
'light_weighted_pressure_plate', 'heavy_weighted_pressure_plate', 'daylight_detector', 'redstone_block', 'hopper', 'dropper',
|
||||
'iron_trapdoor', 'observer', 'iron_door', 'oak_door', 'spruce_door', 'birch_door', 'jungle_door', 'acacia_door', 'dark_oak_door',
|
||||
'crimson_door', 'warped_door', 'repeater', 'comparator', 'redstone', 'lectern', 'target', 'powered_rail', 'detector_rail',
|
||||
'rail', 'activator_rail', 'beacon', 'turtle_egg', 'conduit', 'brewing_stand', 'cauldron', 'sculk_sensor', 'raw_iron_block',
|
||||
'raw_copper_block', 'raw_gold_block', 'powder_snow', 'candle', 'deepslate_coal_ore', 'deepslate_iron_ore', 'deepslate_copper_ore',
|
||||
'deepslate_lapis_ore', 'deepslate_gold_ore', 'deepslate_redstone_ore', 'deepslate_diamond_ore', 'deepslate_emerald_ore',
|
||||
'cobbled_deepslate', 'infested_stone', 'infested_cobblestone', 'infested_stone_bricks', 'infested_cracked_stone_bricks',
|
||||
'infested_mossy_stone_bricks', 'infested_chiseled_stone_bricks', 'infested_deepslate', 'deepslate', 'chiseled_deepslate',
|
||||
'polished_deepslate', 'spore_blossom', 'hanging_roots', 'rooted_dirt', 'dirt_path', 'farmland', 'wall_torch', 'tall_grass',
|
||||
'tall_seagrass', 'big_dripleaf', 'small_dripleaf', 'glow_berries', 'cave_vines', 'cave_vines_plant', 'moss_carpet', 'moss_block',
|
||||
'flowering_azalea_leaves', 'azalea_leaves', 'azalea', 'flowering_azalea', 'glow_lichen', 'dripstone_block', 'pointed_dripstone',
|
||||
'lightning_rod', 'cobbled_deepslate_stairs', 'polished_deepslate_stairs', 'deepslate_brick_stairs', 'deepslate_tile_stairs',
|
||||
'cut_copper_stairs', 'exposed_cut_copper_stairs', 'weathered_cut_copper_stairs', 'oxidized_cut_copper_stairs',
|
||||
'waxed_cut_copper_stairs', 'waxed_exposed_cut_copper_stairs', 'waxed_weathered_cut_copper_stairs',
|
||||
'waxed_oxidized_cut_copper_stairs', 'cobbled_deepslate_slab', 'polished_deepslate_slab', 'deepslate_brick_slab',
|
||||
'deepslate_tile_slab', 'cut_copper_slab', 'exposed_cut_copper_slab', 'weathered_cut_copper_slab', 'oxidized_cut_copper_slab',
|
||||
'waxed_cut_copper_slab', 'waxed_exposed_cut_copper_slab', 'waxed_weathered_cut_copper_slab', 'waxed_oxidized_cut_copper_slab',
|
||||
'copper_block', 'exposed_copper', 'weathered_copper', 'oxidized_copper', 'cut_copper', 'exposed_cut_copper',
|
||||
'weathered_cut_copper', 'oxidized_cut_copper', 'waxed_copper_block', 'waxed_exposed_copper', 'waxed_weathered_copper',
|
||||
'waxed_oxidized_copper', 'waxed_cut_copper', 'waxed_exposed_cut_copper', 'waxed_weathered_cut_copper', 'waxed_oxidized_cut_copper',
|
||||
'copper_ore', 'tinted_glass', 'smooth_basalt', 'calcite', 'amethyst_block', 'budding_amethyst', 'amethyst_cluster',
|
||||
'small_amethyst_bud', 'medium_amethyst_bud', 'large_amethyst_bud', 'amethyst_cluster', 'tuff', 'white_candle', 'orange_candle',
|
||||
'magenta_candle', 'light_blue_candle', 'yellow_candle', 'lime_candle', 'pink_candle', 'gray_candle', 'light_gray_candle',
|
||||
'cyan_candle', 'purple_candle', 'blue_candle', 'brown_candle', 'green_candle', 'red_candle', 'black_candle'
|
||||
];
|
||||
__restore(pl) ->(
|
||||
scoreboard_remove('killCounter');
|
||||
scoreboard_remove('digCounter');
|
||||
scoreboard_remove('deathCounter');
|
||||
scoreboard_remove('tradingCounter');
|
||||
scoreboard_remove('fishingCounter');
|
||||
scoreboard_remove('damageTaken');
|
||||
scoreboard_remove('activation');
|
||||
scoreboard_remove('fz.aviate1m');
|
||||
scoreboard_remove('totalList');
|
||||
scoreboard_add('killCounter');
|
||||
scoreboard_add('digCounter');
|
||||
scoreboard_add('deathCounter');
|
||||
scoreboard_add('tradingCounter');
|
||||
scoreboard_add('fishingCounter');
|
||||
scoreboard_add('damageTaken');
|
||||
scoreboard_add('activation');
|
||||
scoreboard_add('fz.aviate1m');
|
||||
scoreboard_add('totalList');
|
||||
total_actime = 0;
|
||||
total_death = 0;
|
||||
total_mined = 0;
|
||||
total_fished = 0;
|
||||
total_killed = 0;
|
||||
total_traded = 0;
|
||||
total_hurt = 0;
|
||||
failed_list = [];
|
||||
c_for(i = 0, i < length(pl), i += 1,
|
||||
run('player ' + pl:i + ' spawn');
|
||||
game_tick(50);
|
||||
if(player(pl:i) != pl:i,
|
||||
put(failed_list, length(failed_list), pl:i);
|
||||
);
|
||||
//滑翔距离
|
||||
//mc会统计多一倍的数据,所以除以200
|
||||
aviate = statistic(pl:i, 'custom', 'aviate_one_cm')/200;
|
||||
print(aviate);
|
||||
scoreboard('fz.aviate1m', pl:i, aviate);
|
||||
total_aviate += aviate;
|
||||
//活跃时间
|
||||
actime = statistic(pl:i, 'custom', 'play_time')/72000;
|
||||
print(actime);
|
||||
scoreboard('activation', pl:i, actime);
|
||||
total_actime += actime;
|
||||
//抖M榜
|
||||
hurt = statistic(pl:i, 'custom', 'damage_taken')/100;
|
||||
print(hurt);
|
||||
scoreboard('damageTaken', pl:i, hurt);
|
||||
total_hurt += hurt;
|
||||
//死亡榜
|
||||
death = statistic(pl:i, 'custom', 'deaths');
|
||||
print(death);
|
||||
scoreboard('deathCounter', pl:i, death);
|
||||
total_death += death;
|
||||
//挖掘榜
|
||||
mined = 0;
|
||||
c_for(j = 0, j < length(global_bl), j += 1,
|
||||
mined += statistic(pl:i, 'mined', global_bl:j);
|
||||
);
|
||||
print(mined);
|
||||
scoreboard('digCounter', pl:i, mined);
|
||||
total_mined += mined;
|
||||
//钓鱼榜
|
||||
fished = statistic(pl:i, 'custom', 'fish_caught');
|
||||
print(fished);
|
||||
scoreboard('fishingCounter', pl:i, fished);
|
||||
total_fished += fished;
|
||||
//击杀榜
|
||||
killed = statistic(pl:i, 'custom', 'mob_kills');
|
||||
killed += statistic(pl:i, 'custom', 'player_kills');
|
||||
print(killed);
|
||||
scoreboard('killCounter', pl:i, killed);
|
||||
total_killed += killed;
|
||||
//交易榜
|
||||
traded = statistic(pl:i, 'custom', 'traded_with_villager');
|
||||
print(traded);
|
||||
scoreboard('tradingCounter', pl:i, traded);
|
||||
total_traded += traded;
|
||||
run('player ' + pl:i + ' kill')
|
||||
);
|
||||
scoreboard('tradingCounter', '总交♂易数', total_traded);
|
||||
scoreboard('totalList', '总交♂易数', total_traded);
|
||||
scoreboard('killCounter', '总击杀数', total_killed);
|
||||
scoreboard('totalList', '总击杀数', total_killed);
|
||||
scoreboard('fishingCounter', '总钓鱼数', total_fished);
|
||||
scoreboard('totalList', '总钓鱼数', total_fished);
|
||||
scoreboard('digCounter', '总挖掘量', total_mined);
|
||||
scoreboard('totalList', '总挖掘量', total_mined);
|
||||
scoreboard('deathCounter', '全部木大', total_death);
|
||||
scoreboard('totalList', '全部木大', total_death);
|
||||
scoreboard('activation', '总在线时间(h)', total_actime);
|
||||
scoreboard('totalList', '总在线时间(h)', total_actime);
|
||||
scoreboard('damageTaken', '群p抖M', total_hurt);
|
||||
scoreboard('totalList', '群p抖M', total_hurt);
|
||||
scoreboard('fz.aviate1m', '总滑翔距离', total_aviate);
|
||||
scoreboard('totalList', '总滑翔距离', total_aviate);
|
||||
game_tick(50);
|
||||
run('function fz:scoreboards/install');
|
||||
return(failed_list);
|
||||
);
|
||||
by_whitelist() ->(
|
||||
pl = keys(system_info('server_whitelist'));
|
||||
game_tick(50);
|
||||
failed_list = __restore(pl);
|
||||
if(failed_list != [],
|
||||
print(' : ( 这些玩家恢复失败了:' + failed_list);
|
||||
);
|
||||
print('完成!');
|
||||
return()
|
||||
)
|
||||
@@ -0,0 +1,6 @@
|
||||
__config() -> {
|
||||
'stay_loaded' -> true
|
||||
};
|
||||
__command() -> (
|
||||
run('gamemode survival')
|
||||
)
|
||||
@@ -0,0 +1,56 @@
|
||||
"""
|
||||
writen by shenjackyuanjie
|
||||
mail: 3695888@qq.com
|
||||
github: @shenjackyuanjie
|
||||
gitee: @shenjackyuanjie
|
||||
"""
|
||||
|
||||
# -------------------------------
|
||||
# Census loader
|
||||
# Copyright © 2021 by shenjackyuanjie
|
||||
# All rights reserved
|
||||
# -------------------------------
|
||||
|
||||
import os
|
||||
import json
|
||||
|
||||
USERCACHE_PATH = os.path.join('server', 'usercache.json')
|
||||
STATS_DIR = os.path.join('server', 'world', 'stats')
|
||||
DATA_DIR = os.path.join('server', 'world', 'scripts')
|
||||
CENSUS_DIR = os.path.join('server', 'world', 'scripts', 'shared', 'census')
|
||||
|
||||
# 引号内字符匹配错误
|
||||
# text in the quote is not matched
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 加载玩家名列表
|
||||
with open(USERCACHE_PATH, 'r') as cache_file:
|
||||
uuid_cache = json.load(cache_file) # type: list
|
||||
uuid_list = {}
|
||||
# 如果玩家名称不是bot就存进列表里
|
||||
for name in uuid_cache:
|
||||
if name['name'][:3].lower() == 'bot':
|
||||
continue
|
||||
uuid_list[name['name']] = name['uuid']
|
||||
# 检测是否存在census的文件夹
|
||||
if 'shared' not in os.listdir(DATA_DIR):
|
||||
os.mkdir(DATA_DIR + '/shared')
|
||||
if 'census' not in os.listdir(DATA_DIR + '/shared'):
|
||||
os.mkdir(CENSUS_DIR)
|
||||
for uuid in uuid_list:
|
||||
# 加载玩家的统计数据
|
||||
with open(os.path.join(STATS_DIR, uuid_list[uuid] + '.json'), 'r') as stats_file:
|
||||
stats = json.load(stats_file) # type: dict
|
||||
# 计算玩家的分数
|
||||
player_score = {}
|
||||
for score_type in stats['stats']: # 类型,比如 mined
|
||||
player_score[score_type[10:]] = {} # 创建字典套娃
|
||||
count = 0
|
||||
for score in stats['stats'][score_type]: # 类型中的每一种"东西"
|
||||
count += stats['stats'][score_type][score] # 统计每种东西的数量
|
||||
player_score[score_type[10:]][score[10:]] = stats['stats'][score_type][score]
|
||||
player_score[score_type[10:]]['total'] = count
|
||||
# pprint(player_score)
|
||||
file_name = f'{CENSUS_DIR}/{uuid}.json'
|
||||
with open(file_name, 'w') as census_file:
|
||||
json.dump(player_score, census_file)
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user