From 5f9ab4b9cf5bf84b136e30febc2d5a8e5346a004 Mon Sep 17 00:00:00 2001 From: gottsch Date: Mon, 2 Nov 2020 07:45:06 -0500 Subject: [PATCH 01/20] refactor project setup. --- .../advancements/recipes/gold_skull_chest.json | 0 .../treasure2/advancements/recipes/key_ring.json | 0 .../advancements/recipes/pilferers_lock_pick.json | 0 .../treasure2/advancements/recipes/ruby_key.json | 0 .../advancements/recipes/sapphire_key.json | 0 .../treasure2/advancements/recipes/skull_chest.json | 0 .../treasure2/advancements/recipes/spider_key.json | 0 .../advancements/recipes/thiefs_lock_pick.json | 0 .../advancements/recipes/treasure_tool.json | 0 .../treasure2/advancements/recipes/wither_key.json | 0 .../advancements/recipes/wither_planks.json | 0 .../assets/treasure2/blockstates/blackstone.json | 0 .../treasure2/blockstates/cauldron_chest.json | 0 .../treasure2/blockstates/compressor_chest.json | 0 .../assets/treasure2/blockstates/crate_chest.json | 0 .../treasure2/blockstates/crate_chest_moldy.json | 0 .../blockstates/desert_wishing_well_block.json | 0 .../treasure2/blockstates/dread_pirate_chest.json | 0 .../assets/treasure2/blockstates/falling_grass.json | 0 .../treasure2/blockstates/falling_red_sand.json | 0 .../assets/treasure2/blockstates/falling_sand.json | 0 .../resources/assets/treasure2/blockstates/fog.json | 0 .../treasure2/blockstates/gold_skull_chest.json | 0 .../treasure2/blockstates/gold_strongbox.json | 0 .../blockstates/gravestone1_cobblestone.json | 0 .../blockstates/gravestone1_mossy_cobblestone.json | 0 .../treasure2/blockstates/gravestone1_obsidian.json | 0 .../blockstates/gravestone1_polished_andesite.json | 0 .../blockstates/gravestone1_polished_diorite.json | 0 .../blockstates/gravestone1_polished_granite.json | 0 .../blockstates/gravestone1_spawner_stone.json | 0 .../treasure2/blockstates/gravestone1_stone.json | 0 .../blockstates/gravestone2_cobblestone.json | 0 .../blockstates/gravestone2_mossy_cobblestone.json | 0 .../treasure2/blockstates/gravestone2_obsidian.json | 0 .../blockstates/gravestone2_polished_andesite.json | 0 .../blockstates/gravestone2_polished_diorite.json | 0 .../blockstates/gravestone2_polished_granite.json | 0 .../gravestone2_spawner_cobblestone.json | 0 .../treasure2/blockstates/gravestone2_stone.json | 0 .../blockstates/gravestone3_cobblestone.json | 0 .../blockstates/gravestone3_mossy_cobblestone.json | 0 .../treasure2/blockstates/gravestone3_obsidian.json | 0 .../blockstates/gravestone3_polished_andesite.json | 0 .../blockstates/gravestone3_polished_diorite.json | 0 .../blockstates/gravestone3_polished_granite.json | 0 .../blockstates/gravestone3_spawner_obsidian.json | 0 .../treasure2/blockstates/gravestone3_stone.json | 0 .../assets/treasure2/blockstates/high_fog.json | 0 .../treasure2/blockstates/high_poison_fog.json | 0 .../treasure2/blockstates/high_wither_fog.json | 0 .../treasure2/blockstates/iron_strongbox.json | 0 .../treasure2/blockstates/ironbound_chest.json | 0 .../assets/treasure2/blockstates/low_fog.json | 0 .../treasure2/blockstates/low_poison_fog.json | 0 .../treasure2/blockstates/low_wither_fog.json | 0 .../assets/treasure2/blockstates/med_fog.json | 0 .../treasure2/blockstates/med_poison_fog.json | 0 .../treasure2/blockstates/med_wither_fog.json | 0 .../assets/treasure2/blockstates/oyster_chest.json | 0 .../blockstates/painting_blocks_bricks.json | 0 .../blockstates/painting_blocks_cobblestone.json | 0 .../treasure2/blockstates/painting_blocks_dirt.json | 0 .../treasure2/blockstates/painting_blocks_lava.json | 0 .../treasure2/blockstates/painting_blocks_sand.json | 0 .../blockstates/painting_blocks_water.json | 0 .../treasure2/blockstates/painting_blocks_wood.json | 0 .../assets/treasure2/blockstates/pirate_chest.json | 0 .../assets/treasure2/blockstates/pirate_mimic.json | 0 .../assets/treasure2/blockstates/poison_fog.json | 0 .../treasure2/blockstates/proximity_spawner.json | 0 .../assets/treasure2/blockstates/ruby_ore.json | 0 .../assets/treasure2/blockstates/safe.json | 0 .../assets/treasure2/blockstates/sapphire_ore.json | 0 .../assets/treasure2/blockstates/skeleton.json | 0 .../treasure2/blockstates/skull_and_crossbones.json | 0 .../assets/treasure2/blockstates/skull_chest.json | 0 .../assets/treasure2/blockstates/spanish_moss.json | 0 .../assets/treasure2/blockstates/spider_chest.json | 0 .../assets/treasure2/blockstates/viking_chest.json | 0 .../blockstates/whale_bone_pirate_chest.json | 0 .../treasure2/blockstates/wishing_well_block.json | 0 .../assets/treasure2/blockstates/wither_branch.json | 0 .../treasure2/blockstates/wither_broken_log.json | 0 .../assets/treasure2/blockstates/wither_chest.json | 0 .../treasure2/blockstates/wither_chest_top.json | 0 .../assets/treasure2/blockstates/wither_fog.json | 0 .../assets/treasure2/blockstates/wither_log.json | 0 .../treasure2/blockstates/wither_log_soul.json | 0 .../assets/treasure2/blockstates/wither_planks.json | 0 .../assets/treasure2/blockstates/wither_root.json | 0 .../assets/treasure2/blockstates/wood_chest.json | 0 .../assets/treasure2/blockstates/wood_mimic.json | 0 .../resources/assets/treasure2/lang/en_US.lang | 0 .../resources/assets/treasure2/lang/es_ES.lang | 0 .../resources/assets/treasure2/lang/pl_PL.lang | 0 .../resources/assets/treasure2/lang/ru_RU.lang | 0 .../resources/assets/treasure2/lang/zh_CN.lang | 0 .../treasure2/loot_tables/entities/bound_soul.json | 0 .../treasure2/models/block/OLD-skull_chest.json | 0 .../assets/treasure2/models/block/banded_chest.json | 0 .../assets/treasure2/models/block/blackstone.json | 0 .../treasure2/models/block/cauldron_chest.json | 0 .../assets/treasure2/models/block/clam_chest.json | 0 .../treasure2/models/block/compressor_chest.json | 0 .../assets/treasure2/models/block/crate.json | 0 .../assets/treasure2/models/block/crate_chest.json | 0 .../treasure2/models/block/crate_chest_moldy.json | 0 .../models/block/desert_wishing_well_block.json | 0 .../treasure2/models/block/dread_pirate_chest.json | 0 .../treasure2/models/block/falling_grass.json | 0 .../treasure2/models/block/falling_red_sand.json | 0 .../assets/treasure2/models/block/falling_sand.json | 0 .../assets/treasure2/models/block/fog.json | 0 .../treasure2/models/block/gold_skull_chest.json | 0 .../treasure2/models/block/gold_strongbox.json | 0 .../assets/treasure2/models/block/gravestone1.json | 0 .../models/block/gravestone1_cobblestone.json | 0 .../models/block/gravestone1_mossy_cobblestone.json | 0 .../models/block/gravestone1_obsidian.json | 0 .../models/block/gravestone1_polished_andesite.json | 0 .../models/block/gravestone1_polished_diorite.json | 0 .../models/block/gravestone1_polished_granite.json | 0 .../treasure2/models/block/gravestone1_stone.json | 0 .../assets/treasure2/models/block/gravestone2.json | 0 .../models/block/gravestone2_cobblestone.json | 0 .../models/block/gravestone2_mossy_cobblestone.json | 0 .../models/block/gravestone2_obsidian.json | 0 .../models/block/gravestone2_polished_andesite.json | 0 .../models/block/gravestone2_polished_diorite.json | 0 .../models/block/gravestone2_polished_granite.json | 0 .../treasure2/models/block/gravestone2_stone.json | 0 .../assets/treasure2/models/block/gravestone3.json | 0 .../models/block/gravestone3_cobblestone.json | 0 .../models/block/gravestone3_mossy_cobblestone.json | 0 .../models/block/gravestone3_obsidian.json | 0 .../models/block/gravestone3_polished_andesite.json | 0 .../models/block/gravestone3_polished_diorite.json | 0 .../models/block/gravestone3_polished_granite.json | 0 .../treasure2/models/block/gravestone3_stone.json | 0 .../assets/treasure2/models/block/high_fog.json | 0 .../treasure2/models/block/high_poison_fog.json | 0 .../treasure2/models/block/high_wither_fog.json | 0 .../treasure2/models/block/iron_strongbox.json | 0 .../treasure2/models/block/ironbound_chest.json | 0 .../assets/treasure2/models/block/low_fog.json | 0 .../treasure2/models/block/low_poison_fog.json | 0 .../treasure2/models/block/low_wither_fog.json | 0 .../assets/treasure2/models/block/med_fog.json | 0 .../treasure2/models/block/med_poison_fog.json | 0 .../treasure2/models/block/med_wither_fog.json | 0 .../assets/treasure2/models/block/ore_parent.json | 0 .../assets/treasure2/models/block/oyster_chest.json | 0 .../assets/treasure2/models/block/painting.json | 0 .../models/block/painting_blocks_bricks.json | 0 .../models/block/painting_blocks_cobblestone.json | 0 .../models/block/painting_blocks_dirt.json | 0 .../models/block/painting_blocks_lava.json | 0 .../models/block/painting_blocks_sand.json | 0 .../models/block/painting_blocks_water.json | 0 .../models/block/painting_blocks_wood.json | 0 .../assets/treasure2/models/block/pirate_chest.json | 0 .../assets/treasure2/models/block/poison_fog.json | 0 .../treasure2/models/block/proximity_spawner.json | 0 .../assets/treasure2/models/block/ruby_ore.json | 0 .../assets/treasure2/models/block/safe.json | 0 .../assets/treasure2/models/block/sapphire_ore.json | 0 .../treasure2/models/block/skeleton_bottom.json | 0 .../assets/treasure2/models/block/skeleton_top.json | 0 .../models/block/skull_and_crossbones.json | 0 .../assets/treasure2/models/block/skull_chest.json | 0 .../assets/treasure2/models/block/spanish_moss.json | 0 .../assets/treasure2/models/block/spider_chest.json | 0 .../treasure2/models/block/standard_chest.json | 0 .../assets/treasure2/models/block/strongbox.json | 0 .../assets/treasure2/models/block/viking_chest.json | 0 .../models/block/whale_bone_pirate_chest.json | 0 .../treasure2/models/block/wishing_well_block.json | 0 .../treasure2/models/block/wither_branch1.json | 0 .../treasure2/models/block/wither_branch1a.json | 0 .../treasure2/models/block/wither_branch1b.json | 0 .../treasure2/models/block/wither_branch2.json | 0 .../treasure2/models/block/wither_branch2_OLD.json | 0 .../treasure2/models/block/wither_branch2a.json | 0 .../treasure2/models/block/wither_branch2b.json | 0 .../treasure2/models/block/wither_branch3.json | 0 .../treasure2/models/block/wither_branch3_OLD.json | 0 .../treasure2/models/block/wither_branch3a.json | 0 .../treasure2/models/block/wither_branch3b.json | 0 .../treasure2/models/block/wither_branch5.json | 0 .../treasure2/models/block/wither_branch5_OLD.json | 0 .../treasure2/models/block/wither_branch5a.json | 0 .../treasure2/models/block/wither_branch5b.json | 0 .../treasure2/models/block/wither_branch_OLD.json | 0 .../treasure2/models/block/wither_broken_log.json | 0 .../models/block/wither_broken_log_mossy.json | 0 .../models/block/wither_broken_log_normal.json | 0 .../assets/treasure2/models/block/wither_chest.json | 0 .../treasure2/models/block/wither_chest_top.json | 0 .../assets/treasure2/models/block/wither_fog.json | 0 .../assets/treasure2/models/block/wither_log.json | 0 .../treasure2/models/block/wither_log_full.json | 0 .../treasure2/models/block/wither_log_full_OLD.json | 0 .../models/block/wither_log_full_mossy.json | 0 .../treasure2/models/block/wither_log_normal.json | 0 .../models/block/wither_log_normal_OLD.json | 0 .../models/block/wither_log_normal_mossy.json | 0 .../treasure2/models/block/wither_log_soul.json | 0 .../treasure2/models/block/wither_log_stripped.json | 0 .../treasure2/models/block/wither_planks.json | 0 .../assets/treasure2/models/block/wither_root1.json | 0 .../treasure2/models/block/wither_root1a.json | 0 .../treasure2/models/block/wither_root1b.json | 0 .../assets/treasure2/models/block/wither_root2.json | 0 .../treasure2/models/block/wither_root2a.json | 0 .../treasure2/models/block/wither_root2b.json | 0 .../assets/treasure2/models/block/wood_chest.json | 0 .../treasure2/models/item/adephagias_bounty.json | 0 .../assets/treasure2/models/item/angel_blessed.json | 0 .../treasure2/models/item/apprentices_pouch.json | 0 .../assets/treasure2/models/item/black_pearl.json | 0 .../assets/treasure2/models/item/blackstone.json | 0 .../treasure2/models/item/cauldron_chest.json | 0 .../treasure2/models/item/charmed_gold_coin.json | 0 .../assets/treasure2/models/item/charmed_ruby.json | 0 .../treasure2/models/item/charmed_silver_coin.json | 0 .../treasure2/models/item/compressor_chest.json | 0 .../assets/treasure2/models/item/crate_chest.json | 0 .../treasure2/models/item/crate_chest_moldy.json | 0 .../models/item/desert_wishing_well_block.json | 0 .../assets/treasure2/models/item/diamond_key.json | 0 .../assets/treasure2/models/item/diamond_lock.json | 0 .../treasure2/models/item/dread_pirate_chest.json | 0 .../treasure2/models/item/dwarven_talisman.json | 0 .../assets/treasure2/models/item/ember_key.json | 0 .../assets/treasure2/models/item/ember_lock.json | 0 .../assets/treasure2/models/item/emerald_key.json | 0 .../assets/treasure2/models/item/emerald_lock.json | 0 .../assets/treasure2/models/item/eye_patch.json | 0 .../assets/treasure2/models/item/falling_grass.json | 0 .../treasure2/models/item/falling_red_sand.json | 0 .../assets/treasure2/models/item/falling_sand.json | 0 .../resources/assets/treasure2/models/item/fog.json | 0 .../assets/treasure2/models/item/fools_coin.json | 0 .../assets/treasure2/models/item/gold_coin.json | 0 .../assets/treasure2/models/item/gold_key.json | 0 .../assets/treasure2/models/item/gold_lock.json | 0 .../treasure2/models/item/gold_skull_chest.json | 0 .../treasure2/models/item/gold_strongbox.json | 0 .../models/item/gravestone1_cobblestone.json | 0 .../models/item/gravestone1_mossy_cobblestone.json | 0 .../treasure2/models/item/gravestone1_obsidian.json | 0 .../models/item/gravestone1_polished_andesite.json | 0 .../models/item/gravestone1_polished_diorite.json | 0 .../models/item/gravestone1_polished_granite.json | 0 .../models/item/gravestone1_spawner_stone.json | 0 .../treasure2/models/item/gravestone1_stone.json | 0 .../models/item/gravestone2_cobblestone.json | 0 .../models/item/gravestone2_mossy_cobblestone.json | 0 .../treasure2/models/item/gravestone2_obsidian.json | 0 .../models/item/gravestone2_polished_andesite.json | 0 .../models/item/gravestone2_polished_diorite.json | 0 .../models/item/gravestone2_polished_granite.json | 0 .../item/gravestone2_spawner_cobblestone.json | 0 .../treasure2/models/item/gravestone2_stone.json | 0 .../models/item/gravestone3_cobblestone.json | 0 .../models/item/gravestone3_mossy_cobblestone.json | 0 .../treasure2/models/item/gravestone3_obsidian.json | 0 .../models/item/gravestone3_polished_andesite.json | 0 .../models/item/gravestone3_polished_diorite.json | 0 .../models/item/gravestone3_polished_granite.json | 0 .../models/item/gravestone3_spawner_obsidian.json | 0 .../treasure2/models/item/gravestone3_stone.json | 0 .../assets/treasure2/models/item/high_fog.json | 0 .../treasure2/models/item/high_poison_fog.json | 0 .../treasure2/models/item/high_wither_fog.json | 0 .../assets/treasure2/models/item/iron_key.json | 0 .../assets/treasure2/models/item/iron_lock.json | 0 .../treasure2/models/item/iron_strongbox.json | 0 .../treasure2/models/item/ironbound_chest.json | 0 .../assets/treasure2/models/item/jewelled_key.json | 0 .../assets/treasure2/models/item/key_ring.json | 0 .../assets/treasure2/models/item/leaf_key.json | 0 .../assets/treasure2/models/item/leaf_lock.json | 0 .../assets/treasure2/models/item/lightning_key.json | 0 .../assets/treasure2/models/item/low_fog.json | 0 .../treasure2/models/item/low_poison_fog.json | 0 .../treasure2/models/item/low_wither_fog.json | 0 .../assets/treasure2/models/item/lucky_pouch.json | 0 .../assets/treasure2/models/item/masters_pouch.json | 0 .../assets/treasure2/models/item/med_fog.json | 0 .../treasure2/models/item/med_poison_fog.json | 0 .../treasure2/models/item/med_wither_fog.json | 0 .../assets/treasure2/models/item/medics_token.json | 0 .../treasure2/models/item/metallurgists_key.json | 0 .../assets/treasure2/models/item/miners_friend.json | 0 .../assets/treasure2/models/item/mirthas_torch.json | 0 .../models/item/painting_blocks_bricks.json | 0 .../models/item/painting_blocks_cobblestone.json | 0 .../treasure2/models/item/painting_blocks_dirt.json | 0 .../treasure2/models/item/painting_blocks_lava.json | 0 .../treasure2/models/item/painting_blocks_sand.json | 0 .../models/item/painting_blocks_water.json | 0 .../treasure2/models/item/painting_blocks_wood.json | 0 .../treasure2/models/item/pilferers_lock_pick.json | 0 .../assets/treasure2/models/item/pirate_chest.json | 0 .../assets/treasure2/models/item/pirate_mimic.json | 0 .../assets/treasure2/models/item/poison_fog.json | 0 .../assets/treasure2/models/item/pouch.json | 0 .../treasure2/models/item/proximity_spawner.json | 0 .../assets/treasure2/models/item/ruby.json | 0 .../assets/treasure2/models/item/ruby_key.json | 0 .../assets/treasure2/models/item/ruby_lock.json | 0 .../assets/treasure2/models/item/ruby_ore.json | 0 .../assets/treasure2/models/item/safe.json | 0 .../treasure2/models/item/salandaars_ward.json | 0 .../assets/treasure2/models/item/sapphire.json | 0 .../assets/treasure2/models/item/sapphire_key.json | 0 .../assets/treasure2/models/item/sapphire_lock.json | 0 .../assets/treasure2/models/item/sapphire_ore.json | 0 .../assets/treasure2/models/item/silver_coin.json | 0 .../assets/treasure2/models/item/skeleton.json | 0 .../assets/treasure2/models/item/skeleton_key.json | 0 .../treasure2/models/item/skull_and_crossbones.json | 0 .../assets/treasure2/models/item/skull_chest.json | 0 .../assets/treasure2/models/item/skull_sword.json | 0 .../assets/treasure2/models/item/spanish_moss.json | 0 .../assets/treasure2/models/item/spider_chest.json | 0 .../assets/treasure2/models/item/spider_key.json | 0 .../assets/treasure2/models/item/spider_lock.json | 0 .../assets/treasure2/models/item/stone_key.json | 0 .../assets/treasure2/models/item/stone_lock.json | 0 .../treasure2/models/item/thiefs_lock_pick.json | 0 .../assets/treasure2/models/item/treasure_tab.json | 0 .../assets/treasure2/models/item/treasure_tool.json | 0 .../assets/treasure2/models/item/viking_chest.json | 0 .../models/item/whale_bone_pirate_chest.json | 0 .../assets/treasure2/models/item/white_pearl.json | 0 .../treasure2/models/item/wishing_well_block.json | 0 .../treasure2/models/item/wither_broken_log.json | 0 .../assets/treasure2/models/item/wither_chest.json | 0 .../treasure2/models/item/wither_chest_top.json | 0 .../assets/treasure2/models/item/wither_fog.json | 0 .../assets/treasure2/models/item/wither_key.json | 0 .../assets/treasure2/models/item/wither_lock.json | 0 .../assets/treasure2/models/item/wither_log.json | 0 .../treasure2/models/item/wither_log_soul.json | 0 .../assets/treasure2/models/item/wither_planks.json | 0 .../treasure2/models/item/wither_root_item.json | 0 .../treasure2/models/item/wither_stick_item.json | 0 .../assets/treasure2/models/item/wood_chest.json | 0 .../assets/treasure2/models/item/wood_key.json | 0 .../assets/treasure2/models/item/wood_lock.json | 0 .../assets/treasure2/models/item/wood_mimic.json | 0 .../patchouli_books_disabled/guide/book.json | 0 .../guide/en_us/categories/chests.json | 0 .../guide/en_us/categories/coins.json | 0 .../guide/en_us/categories/fog.json | 0 .../guide/en_us/categories/general.json | 0 .../guide/en_us/categories/keys.json | 0 .../guide/en_us/categories/markers.json | 0 .../guide/en_us/categories/mobs.json | 0 .../guide/en_us/categories/recipes.json | 0 .../guide/en_us/categories/wells.json | 0 .../guide/en_us/entries/chest_recipes.json | 0 .../guide/en_us/entries/chests/list.json | 0 .../guide/en_us/entries/general/chests.json | 0 .../guide/en_us/entries/general/coins.json | 0 .../guide/en_us/entries/general/rarities.json | 0 .../en_us/entries/general/treasure_hunting.json | 0 .../guide/en_us/entries/general/wishing_wells.json | 0 .../guide/en_us/entries/key_recipes.json | 0 .../guide/en_us/entries/lock_pick_recipes.json | 0 .../guide/en_us/entries/treasure_tool_recipe.json | 0 .../assets/treasure2/recipes/gold_skull_chest.json | 0 .../treasure2/recipes/gravestone1_cobblestone.json | 0 .../recipes/gravestone1_mossy_cobblestone.json | 0 .../treasure2/recipes/gravestone1_obsidian.json | 0 .../recipes/gravestone1_polished_andesite.json | 0 .../recipes/gravestone1_polished_diorite.json | 0 .../recipes/gravestone1_polished_granite.json | 0 .../assets/treasure2/recipes/gravestone1_stone.json | 0 .../treasure2/recipes/gravestone2_cobblestone.json | 0 .../recipes/gravestone2_mossy_cobblestone.json | 0 .../treasure2/recipes/gravestone2_obsidian.json | 0 .../recipes/gravestone2_polished_andesite.json | 0 .../recipes/gravestone2_polished_diorite.json | 0 .../recipes/gravestone2_polished_granite.json | 0 .../assets/treasure2/recipes/gravestone2_stone.json | 0 .../recipes/gravestone3_mossy_cobblestone.json | 0 .../treasure2/recipes/gravestone3_obsidian.json | 0 .../recipes/gravestone3_polished_andesite.json | 0 .../recipes/gravestone3_polished_diorite.json | 0 .../recipes/gravestone3_polished_granite.json | 0 .../assets/treasure2/recipes/gravestone3_stone.json | 0 .../assets/treasure2/recipes/key_ring.json | 0 .../treasure2/recipes/pilferers_lock_pick.json | 0 .../resources/assets/treasure2/recipes/pouch.json | 0 .../assets/treasure2/recipes/ruby_key.json | 0 .../assets/treasure2/recipes/sapphire_key.json | 0 .../treasure2/recipes/skull_and_crossbones.json | 0 .../assets/treasure2/recipes/skull_chest.json | 0 .../assets/treasure2/recipes/spider_key.json | 0 .../assets/treasure2/recipes/thiefs_lock_pick.json | 0 .../assets/treasure2/recipes/treasure_tool.json | 0 .../assets/treasure2/recipes/wither_key.json | 0 .../assets/treasure2/recipes/wither_planks.json | 0 .../treasure2/structures/aboveground/crypt2.nbt | Bin .../treasure2/structures/aboveground/crypt3.nbt | Bin .../treasure2/structures/underground/basic1.nbt | Bin .../treasure2/structures/underground/basic2.nbt | Bin .../treasure2/structures/underground/basic3.nbt | Bin .../treasure2/structures/underground/basic4.nbt | Bin .../treasure2/structures/underground/basic5.nbt | Bin .../treasure2/structures/underground/cave1.nbt | Bin .../treasure2/structures/underground/cave2.nbt | Bin .../treasure2/structures/underground/cobb1.nbt | Bin .../treasure2/structures/underground/crypt1.nbt | Bin .../assets/treasure2/textures/blocks/blackstone.png | Bin .../treasure2/textures/blocks/blackstone_top.png | Bin .../blocks/chests/SpiderChest2ItemBlock.bbmodel | 0 .../treasure2/textures/blocks/chests/band.png | Bin .../textures/blocks/chests/cauldron_chest_front.png | Bin .../textures/blocks/chests/cauldron_chest_side.png | Bin .../blocks/chests/compressor_chest_side.png | Bin .../textures/blocks/chests/compressor_chest_up.png | Bin .../textures/blocks/chests/crate_chest_board.png | Bin .../textures/blocks/chests/crate_chest_metal.png | Bin .../blocks/chests/crate_chest_moldy_board.png | Bin .../blocks/chests/crate_chest_moldy_north.png | Bin .../textures/blocks/chests/crate_chest_north.png | Bin .../blocks/chests/dread_pirate_chest_iron.png | Bin .../blocks/chests/dread_pirate_chest_lid_side.png | Bin .../blocks/chests/dread_pirate_chest_side.png | Bin .../blocks/chests/dread_pirate_skull_front.png | Bin .../blocks/chests/dread_pirate_skull_mouth.png | Bin .../textures/blocks/chests/gold_skull_eyes.png | Bin .../blocks/chests/gold_skull_mouth_front.png | Bin .../textures/blocks/chests/gold_skull_texture.png | Bin .../blocks/chests/gold_strongbox_chest.json | 0 .../textures/blocks/chests/gold_strongbox_foot.png | Bin .../textures/blocks/chests/gold_strongbox_front.png | Bin .../textures/blocks/chests/gold_strongbox_pad.png | Bin .../textures/blocks/chests/gold_strongbox_side.png | Bin .../textures/blocks/chests/gold_strongbox_up.png | Bin .../textures/blocks/chests/iron_strongbox_foot.png | Bin .../textures/blocks/chests/iron_strongbox_front.png | Bin .../textures/blocks/chests/iron_strongbox_pad.png | Bin .../textures/blocks/chests/iron_strongbox_side.png | Bin .../textures/blocks/chests/iron_strongbox_up.png | Bin .../textures/blocks/chests/pirate_chest_east.png | Bin .../textures/blocks/chests/pirate_chest_east2.png | Bin .../textures/blocks/chests/pirate_chest_north.png | Bin .../textures/blocks/chests/pirate_chest_up.png | Bin .../treasure2/textures/blocks/chests/safe-foot.png | Bin .../textures/blocks/chests/safe-handle.png | Bin .../treasure2/textures/blocks/chests/safe-side.png | Bin .../treasure2/textures/blocks/chests/skull_eyes.png | Bin .../textures/blocks/chests/skull_mouth_front.png | Bin .../textures/blocks/chests/skull_texture.png | Bin .../textures/blocks/chests/spider_body.png | Bin .../textures/blocks/chests/spider_head.png | Bin .../textures/blocks/chests/spider_legs.png | Bin .../textures/blocks/chests/viking-chest.png | Bin .../textures/blocks/chests/wither_chest_east.png | Bin .../textures/blocks/chests/wither_chest_front.png | Bin .../textures/blocks/chests/wood_chest_east.png | Bin .../textures/blocks/chests/wood_chest_north.png | Bin .../textures/blocks/chests/wood_chest_up.png | Bin .../assets/treasure2/textures/blocks/crossbone.png | Bin .../assets/treasure2/textures/blocks/fog.png | Bin .../blocks/paintings/painting_blocks_bricks.png | Bin .../paintings/painting_blocks_cobblestone.png | Bin .../blocks/paintings/painting_blocks_dirt.png | Bin .../blocks/paintings/painting_blocks_lava.png | Bin .../blocks/paintings/painting_blocks_sand.png | Bin .../blocks/paintings/painting_blocks_water.png | Bin .../blocks/paintings/painting_blocks_wood.png | Bin .../textures/blocks/paintings/painting_frame.png | Bin .../assets/treasure2/textures/blocks/poison_fog.png | Bin .../treasure2/textures/blocks/ruby_nugget.png | Bin .../treasure2/textures/blocks/sapphire_nugget.png | Bin .../treasure2/textures/blocks/skeleton_body.png | Bin .../treasure2/textures/blocks/skeleton_bottom.png | Bin .../treasure2/textures/blocks/skeleton_head.png | Bin .../assets/treasure2/textures/blocks/skull_east.png | Bin .../treasure2/textures/blocks/skull_grave1.png | Bin .../treasure2/textures/blocks/skull_north.png | Bin .../treasure2/textures/blocks/skull_south.png | Bin .../textures/blocks/skullandcrossbones.png | Bin .../treasure2/textures/blocks/spanish_moss.png | Bin .../treasure2/textures/blocks/wither_branch.png | Bin .../assets/treasure2/textures/blocks/wither_fog.png | Bin .../assets/treasure2/textures/blocks/wither_log.png | Bin .../treasure2/textures/blocks/wither_log_2.png | Bin .../treasure2/textures/blocks/wither_log_OLD.png | Bin .../treasure2/textures/blocks/wither_log_face.png | Bin .../treasure2/textures/blocks/wither_log_mossy.png | Bin .../treasure2/textures/blocks/wither_log_top.png | Bin .../treasure2/textures/blocks/wither_log_top_2.png | Bin .../textures/blocks/wither_log_top_OLD.png | Bin .../treasure2/textures/blocks/wither_moss.png | Bin .../treasure2/textures/blocks/wither_planks.png | Bin .../textures/entity/chest/cauldron-chest.png | Bin .../treasure2/textures/entity/chest/clam-chest.png | Bin .../textures/entity/chest/compressor-chest.png | Bin .../textures/entity/chest/crate-chest-moldy.png | Bin .../treasure2/textures/entity/chest/crate-chest.png | Bin .../textures/entity/chest/dread-pirate-chest.png | Bin .../textures/entity/chest/gold-skull-chest.png | Bin .../textures/entity/chest/gold-strongbox.png | Bin .../textures/entity/chest/iron-strongbox.png | Bin .../textures/entity/chest/ironbound-chest.png | Bin .../textures/entity/chest/oyster-chest.png | Bin .../textures/entity/chest/pirate-chest.png | Bin .../assets/treasure2/textures/entity/chest/safe.png | Bin .../treasure2/textures/entity/chest/skull-chest.png | Bin .../textures/entity/chest/spider-chest.png | Bin .../textures/entity/chest/standard-chest.png | Bin .../treasure2/textures/entity/chest/test-chest.png | Bin .../textures/entity/chest/viking-chest.png | Bin .../entity/chest/whale-bone-pirate-chest.png | Bin .../textures/entity/chest/wither-chest.png | Bin .../treasure2/textures/entity/chest/wood-chest.png | Bin .../treasure2/textures/entity/mob/bound-soul.png | Bin .../treasure2/textures/entity/mob/pirate-mimic.png | Bin .../treasure2/textures/entity/mob/wood-mimic.png | Bin .../textures/gui/container/apprentices_pouch.png | Bin .../treasure2/textures/gui/container/armoire.png | Bin .../textures/gui/container/compressor_chest.png | Bin .../treasure2/textures/gui/container/key_ring.png | Bin .../textures/gui/container/lucky_pouch.png | Bin .../textures/gui/container/masters_pouch.png | Bin .../textures/gui/container/mollusc_chest.png | Bin .../treasure2/textures/gui/container/pouch.png | Bin .../textures/gui/container/skull_chest.png | Bin .../treasure2/textures/gui/container/strongbox.png | Bin .../textures/gui/container/treasure_chest.png | Bin .../textures/gui/container/wither_chest.png | Bin .../textures/gui/patchouli/guide/church1.png | Bin .../textures/gui/patchouli/guide/graveyard1.png | Bin .../textures/gui/patchouli/guide/graveyard2.png | Bin .../textures/gui/patchouli/guide/graveyard3.png | Bin .../textures/gui/patchouli/guide/graveyard4.png | Bin .../textures/gui/patchouli/guide/sunkenship1.png | Bin .../textures/gui/patchouli/guide/sunkenship2.png | Bin .../textures/gui/patchouli/guide/tower1.png | Bin .../textures/gui/patchouli/guide/tower2.png | Bin .../textures/gui/patchouli/guide/tower3.png | Bin .../textures/gui/patchouli/guide/well1.png | Bin .../textures/gui/patchouli/guide/withergrove1.png | Bin .../textures/gui/patchouli/guide/withergrove2.png | Bin .../assets/treasure2/textures/items/32/iron_key.png | Bin .../items/New Microsoft Publisher Document.pub | Bin .../treasure2/textures/items/apprentices_pouch.png | Bin .../treasure2/textures/items/arcane_pouch.png | Bin .../treasure2/textures/items/black_pearl_10.png | Bin .../treasure2/textures/items/black_pearl_12.png | Bin .../treasure2/textures/items/charmed_ruby.png | Bin .../treasure2/textures/items/charmed_sapphire.png | Bin .../textures/items/coins/charmed_gold_coin.png | Bin .../textures/items/coins/charmed_silver_coin.png | Bin .../treasure2/textures/items/coins/gold_coin.png | Bin .../treasure2/textures/items/coins/silver_coin.png | Bin .../assets/treasure2/textures/items/eye_patch.png | Bin .../treasure2/textures/items/keys/diamond_key.png | Bin .../treasure2/textures/items/keys/ember_key.png | Bin .../treasure2/textures/items/keys/emerald_key.png | Bin .../treasure2/textures/items/keys/gold_key.png | Bin .../treasure2/textures/items/keys/iron_key.png | Bin .../treasure2/textures/items/keys/jewelled_key.png | Bin .../treasure2/textures/items/keys/key_ring.png | Bin .../treasure2/textures/items/keys/key_ring_old.png | Bin .../treasure2/textures/items/keys/leaf_key.png | Bin .../treasure2/textures/items/keys/lightning_key.png | Bin .../textures/items/keys/metallurgists_key.png | Bin .../textures/items/keys/pilferers_lock_pick.png | Bin .../treasure2/textures/items/keys/ruby_key.png | Bin .../treasure2/textures/items/keys/sapphire_key.png | Bin .../treasure2/textures/items/keys/skeleton_key.png | Bin .../treasure2/textures/items/keys/spider_key.png | Bin .../treasure2/textures/items/keys/stone_key.png | Bin .../textures/items/keys/thiefs_lock_pick.png | Bin .../treasure2/textures/items/keys/wither_key.png | Bin .../treasure2/textures/items/keys/wood_key.png | Bin .../treasure2/textures/items/locks/diamond_lock.png | Bin .../treasure2/textures/items/locks/ember_lock.png | Bin .../treasure2/textures/items/locks/emerald_lock.png | Bin .../treasure2/textures/items/locks/gold_lock.png | Bin .../treasure2/textures/items/locks/iron_lock.png | Bin .../treasure2/textures/items/locks/leaf_lock.png | Bin .../treasure2/textures/items/locks/ruby_lock.png | Bin .../treasure2/textures/items/locks/ruby_lock2.png | Bin .../textures/items/locks/sapphire_lock.png | Bin .../textures/items/locks/sapphire_lock2.png | Bin .../treasure2/textures/items/locks/spider_lock.png | Bin .../treasure2/textures/items/locks/stone_lock.png | Bin .../treasure2/textures/items/locks/wither_lock.png | Bin .../treasure2/textures/items/locks/wood_lock.png | Bin .../assets/treasure2/textures/items/lucky_pouch.png | Bin .../treasure2/textures/items/masters_pouch.png | Bin .../assets/treasure2/textures/items/oyster_meat.png | Bin .../treasure2/textures/items/painting_item1x1.png | Bin .../treasure2/textures/items/painting_item2x1.png | Bin .../assets/treasure2/textures/items/pouch.png | Bin .../assets/treasure2/textures/items/ruby.png | Bin .../assets/treasure2/textures/items/sapphire.png | Bin .../treasure2/textures/items/skeleton_item.png | Bin .../assets/treasure2/textures/items/skull_sword.png | Bin .../treasure2/textures/items/treasure_tab.png | Bin .../treasure2/textures/items/treasure_tab_old.png | Bin .../treasure2/textures/items/treasure_tool.png | Bin .../assets/treasure2/textures/items/white_pearl.png | Bin .../treasure2/textures/items/white_pearl_10.png | Bin .../treasure2/textures/items/white_pearl_12.png | Bin .../assets/treasure2/textures/items/wither_root.png | Bin .../treasure2/textures/items/wither_stick.png | Bin .../treasure2/textures/models/armor/eye_patch.png | Bin .../textures/models/armor/eye_patch_model.png | Bin .../treasure2/textures/particle/mist_particle.png | Bin .../treasure2/textures/particle/mist_particle2.png | Bin .../treasure2/textures/particle/mist_particle3.png | Bin .../treasure2/textures/particle/mist_particle4.png | Bin .../textures/particle/poison_mist_particle.png | Bin .../textures/particle/poison_mist_particle2.png | Bin .../textures/particle/poison_mist_particle3.png | Bin .../textures/particle/poison_mist_particle4.png | Bin .../textures/particle/wither_mist_particle.png | Bin .../textures/particle/wither_mist_particle2.png | Bin .../textures/particle/wither_mist_particle3.png | Bin .../textures/particle/wither_mist_particle4.png | Bin .../resources/decay/treasure2/aged_ruleset.json | 0 .../resources/decay/treasure2/default_ruleset.json | 0 .../resources/decay/treasure2/ruinous_ruleset.json | 0 .../loot_tables/mocreatures/armor/common.json | 0 .../loot_tables/mocreatures/armor/rare.json | 0 .../loot_tables/mocreatures/armor/scarce.json | 0 .../loot_tables/mocreatures/armor/uncommon.json | 0 .../mocreatures/chests/common/armor_tool_chest.json | 0 .../chests/common/food_potion_chest.json | 0 .../mocreatures/chests/common/general_chest.json | 0 .../mocreatures/chests/epic/general_chest.json | 0 .../mocreatures/chests/rare/armor_tool_chest.json | 0 .../mocreatures/chests/rare/food_potion_chest.json | 0 .../mocreatures/chests/rare/general_chest.json | 0 .../mocreatures/chests/scarce/armor_tool_chest.json | 0 .../chests/scarce/food_potion_chest.json | 0 .../mocreatures/chests/scarce/general_chest.json | 0 .../chests/uncommon/armor_tool_chest.json | 0 .../chests/uncommon/food_potion_chest.json | 0 .../mocreatures/chests/uncommon/general_chest.json | 0 .../loot_tables/mocreatures/food/common.json | 0 .../loot_tables/mocreatures/food/scarce.json | 0 .../loot_tables/mocreatures/food/uncommon.json | 0 .../loot_tables/mocreatures/items/common.json | 0 .../loot_tables/mocreatures/items/epic.json | 0 .../loot_tables/mocreatures/items/rare.json | 0 .../loot_tables/mocreatures/items/scarce.json | 0 .../loot_tables/mocreatures/items/uncommon.json | 0 .../loot_tables/mocreatures/tools/common.json | 0 .../loot_tables/mocreatures/tools/rare.json | 0 .../loot_tables/mocreatures/tools/scarce.json | 0 .../loot_tables/mocreatures/tools/uncommon.json | 0 .../loot_tables/sgs_metals/armor/epic.json | 0 .../loot_tables/sgs_metals/armor/rare.json | 0 .../loot_tables/sgs_metals/armor/scarce.json | 0 .../sgs_metals/chests/epic/general_chest.json | 0 .../sgs_metals/chests/rare/armor_tool_chest.json | 0 .../sgs_metals/chests/rare/general_chest.json | 0 .../sgs_metals/chests/scarce/armor_tool_chest.json | 0 .../sgs_metals/chests/scarce/general_chest.json | 0 .../loot_tables/sgs_metals/items/epic.json | 0 .../loot_tables/sgs_metals/items/rare.json | 0 .../loot_tables/sgs_metals/items/scarce.json | 0 .../loot_tables/sgs_metals/tools/epic.json | 0 .../loot_tables/sgs_metals/tools/rare.json | 0 .../loot_tables/sgs_metals/tools/scarce.json | 0 .../loot_tables/treasure2/armor/common.json | 0 .../resources/loot_tables/treasure2/armor/epic.json | 0 .../resources/loot_tables/treasure2/armor/rare.json | 0 .../loot_tables/treasure2/armor/scarce.json | 0 .../loot_tables/treasure2/armor/uncommon.json | 0 .../treasure2/chests/common/armor_tool_chest.json | 0 .../treasure2/chests/common/food_potion_chest.json | 0 .../treasure2/chests/common/general_chest.json | 0 .../treasure2/chests/epic/general_chest.json | 0 .../treasure2/chests/rare/armor_tool_chest.json | 0 .../treasure2/chests/rare/food_potion_chest.json | 0 .../treasure2/chests/rare/general_chest.json | 0 .../treasure2/chests/scarce/armor_tool_chest.json | 0 .../treasure2/chests/scarce/food_potion_chest.json | 0 .../treasure2/chests/scarce/general_chest.json | 0 .../treasure2/chests/special/black_pearl_well.json | 0 .../treasure2/chests/special/cauldron_chest.json | 0 .../treasure2/chests/special/gold_skull_chest.json | 0 .../treasure2/chests/special/skull_chest.json | 0 .../treasure2/chests/special/white_pearl_well.json | 0 .../treasure2/chests/special/wither_chest.json | 0 .../treasure2/chests/uncommon/armor_tool_chest.json | 0 .../chests/uncommon/food_potion_chest.json | 0 .../treasure2/chests/uncommon/general_chest.json | 0 .../loot_tables/treasure2/food/common.json | 0 .../resources/loot_tables/treasure2/food/epic.json | 0 .../resources/loot_tables/treasure2/food/rare.json | 0 .../loot_tables/treasure2/food/scarce.json | 0 .../loot_tables/treasure2/food/uncommon.json | 0 .../loot_tables/treasure2/items/common.json | 0 .../resources/loot_tables/treasure2/items/epic.json | 0 .../resources/loot_tables/treasure2/items/rare.json | 0 .../loot_tables/treasure2/items/scarce.json | 0 .../loot_tables/treasure2/items/uncommon.json | 0 .../loot_tables/treasure2/potions/common.json | 0 .../loot_tables/treasure2/potions/epic.json | 0 .../loot_tables/treasure2/potions/rare.json | 0 .../loot_tables/treasure2/potions/scarce.json | 0 .../loot_tables/treasure2/potions/uncommon.json | 0 .../loot_tables/treasure2/tools/common.json | 0 .../resources/loot_tables/treasure2/tools/epic.json | 0 .../resources/loot_tables/treasure2/tools/rare.json | 0 .../loot_tables/treasure2/tools/scarce.json | 0 .../loot_tables/treasure2/tools/uncommon.json | 0 .../loot_tables/treasure2/treasure/common.json | 0 .../loot_tables/treasure2/treasure/epic.json | 0 .../loot_tables/treasure2/treasure/epic_charms.json | 0 .../loot_tables/treasure2/treasure/rare.json | 0 .../loot_tables/treasure2/treasure/rare_charms.json | 0 .../loot_tables/treasure2/treasure/scarce.json | 0 .../treasure2/treasure/scarce_charms.json | 0 .../loot_tables/treasure2/treasure/uncommon.json | 0 .../treasure2/treasure/uncommon_charms.json | 0 src/{ => main}/resources/mcmod.info | 0 .../resources/meta/treasure2/structures/basic1.json | 0 .../resources/meta/treasure2/structures/basic2.json | 0 .../resources/meta/treasure2/structures/basic3.json | 0 .../resources/meta/treasure2/structures/basic4.json | 0 .../resources/meta/treasure2/structures/basic5.json | 0 .../meta/treasure2/structures/beached-ship1.json | 0 .../meta/treasure2/structures/beached-ship2.json | 0 .../meta/treasure2/structures/beached-ship3.json | 0 .../meta/treasure2/structures/blacksmith1.json | 0 .../treasure2/structures/canopy-wishing-well1.json | 0 .../meta/treasure2/structures/castle1.json | 0 .../resources/meta/treasure2/structures/cave1.json | 0 .../resources/meta/treasure2/structures/cave2.json | 0 .../meta/treasure2/structures/church1.json | 0 .../resources/meta/treasure2/structures/cobb1.json | 0 .../resources/meta/treasure2/structures/crypt1.json | 0 .../resources/meta/treasure2/structures/crypt2.json | 0 .../resources/meta/treasure2/structures/crypt3.json | 0 .../meta/treasure2/structures/desert-tower2.json | 0 .../treasure2/structures/desert-wishing-well1.json | 0 .../treasure2/structures/desert-wishing-well2.json | 0 .../resources/meta/treasure2/structures/dingy1.json | 0 .../meta/treasure2/structures/fortress1.json | 0 .../resources/meta/treasure2/structures/house1.json | 0 .../resources/meta/treasure2/structures/ionic1.json | 0 .../meta/treasure2/structures/iron-chamber1.json | 0 .../meta/treasure2/structures/iron-chamber2.json | 0 .../meta/treasure2/structures/large-tower1.json | 0 .../resources/meta/treasure2/structures/mine1.json | 0 .../treasure2/structures/obsidian-chamber1.json | 0 .../meta/treasure2/structures/pirate-chamber1.json | 0 .../meta/treasure2/structures/simple-well1.json | 0 .../meta/treasure2/structures/sunken-ship1.json | 0 .../meta/treasure2/structures/sunken-ship2.json | 0 .../meta/treasure2/structures/sunken-ship3.json | 0 .../resources/meta/treasure2/structures/tower1.json | 0 .../resources/meta/treasure2/structures/tower2.json | 0 .../resources/meta/treasure2/structures/tower3.json | 0 .../resources/meta/treasure2/structures/tower4.json | 0 .../resources/meta/treasure2/structures/tower5.json | 0 .../meta/treasure2/structures/underwater-ruin1.json | 0 .../treasure2/structures/underwater-ruins2.json | 0 .../treasure2/structures/underwater-ruins3.json | 0 .../meta/treasure2/structures/wither-chamber1.json | 0 .../structures/wood-draw-wishing-well1.json | 0 .../structures/treasure2/submerged/dingy1.nbt | Bin .../structures/treasure2/submerged/sunken-ship1.nbt | Bin .../structures/treasure2/submerged/sunken-ship2.nbt | Bin .../structures/treasure2/submerged/sunken-ship3.nbt | Bin .../treasure2/submerged/underwater-ruin1.nbt | Bin .../treasure2/submerged/underwater-ruins2.nbt | Bin .../treasure2/submerged/underwater-ruins3.nbt | Bin .../structures/treasure2/subterranean/basic1.nbt | Bin .../structures/treasure2/subterranean/basic2.nbt | Bin .../structures/treasure2/subterranean/basic3.nbt | Bin .../structures/treasure2/subterranean/basic4.nbt | Bin .../structures/treasure2/subterranean/basic5.nbt | Bin .../structures/treasure2/subterranean/cave1.nbt | Bin .../structures/treasure2/subterranean/cave2.nbt | Bin .../structures/treasure2/subterranean/cobb1.nbt | Bin .../structures/treasure2/subterranean/crypt1.nbt | Bin .../structures/treasure2/subterranean/ionic1.nbt | Bin .../treasure2/subterranean/iron-chamber1.nbt | Bin .../treasure2/subterranean/iron-chamber2.nbt | Bin .../structures/treasure2/subterranean/mine1.nbt | Bin .../treasure2/subterranean/obsidian-chamber1.nbt | Bin .../treasure2/subterranean/pirate-chamber1.nbt | Bin .../treasure2/subterranean/wither-chamber1.nbt | Bin .../structures/treasure2/surface/beached-ship1.nbt | Bin .../structures/treasure2/surface/beached-ship2.nbt | Bin .../structures/treasure2/surface/beached-ship3.nbt | Bin .../structures/treasure2/surface/blacksmith1.nbt | Bin .../structures/treasure2/surface/castle1.nbt | Bin .../structures/treasure2/surface/church1.nbt | Bin .../structures/treasure2/surface/crypt2.nbt | Bin .../structures/treasure2/surface/crypt3.nbt | Bin .../structures/treasure2/surface/desert-tower2.nbt | Bin .../structures/treasure2/surface/fortress1.nbt | Bin .../structures/treasure2/surface/house1.nbt | Bin .../structures/treasure2/surface/large-tower1.nbt | Bin .../structures/treasure2/surface/tower1.nbt | Bin .../structures/treasure2/surface/tower2.nbt | Bin .../structures/treasure2/surface/tower3.nbt | Bin .../structures/treasure2/surface/tower4.nbt | Bin .../structures/treasure2/surface/tower5.nbt | Bin .../treasure2/wells/canopy-wishing-well1.nbt | Bin .../treasure2/wells/desert-wishing-well1.nbt | Bin .../treasure2/wells/desert-wishing-well2.nbt | Bin .../structures/treasure2/wells/simple-well1.nbt | Bin .../treasure2/wells/wood-draw-wishing-well1.nbt | Bin .../resources/treasure2-curseforge-logo.png | Bin src/{ => main}/resources/treasure2-github-logo.png | Bin 823 files changed, 0 insertions(+), 0 deletions(-) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/gold_skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/key_ring.json (100%) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/pilferers_lock_pick.json (100%) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/ruby_key.json (100%) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/sapphire_key.json (100%) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/spider_key.json (100%) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/thiefs_lock_pick.json (100%) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/treasure_tool.json (100%) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/wither_key.json (100%) rename src/{ => main}/resources/assets/treasure2/advancements/recipes/wither_planks.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/blackstone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/cauldron_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/compressor_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/crate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/crate_chest_moldy.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/desert_wishing_well_block.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/dread_pirate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/falling_grass.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/falling_red_sand.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/falling_sand.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gold_skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gold_strongbox.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone1_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone1_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone1_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone1_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone1_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone1_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone1_spawner_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone1_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone2_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone2_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone2_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone2_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone2_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone2_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone2_spawner_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone2_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone3_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone3_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone3_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone3_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone3_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone3_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone3_spawner_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/gravestone3_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/high_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/high_poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/high_wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/iron_strongbox.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/ironbound_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/low_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/low_poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/low_wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/med_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/med_poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/med_wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/oyster_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/painting_blocks_bricks.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/painting_blocks_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/painting_blocks_dirt.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/painting_blocks_lava.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/painting_blocks_sand.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/painting_blocks_water.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/painting_blocks_wood.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/pirate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/pirate_mimic.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/proximity_spawner.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/ruby_ore.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/safe.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/sapphire_ore.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/skeleton.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/skull_and_crossbones.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/spanish_moss.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/spider_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/viking_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/whale_bone_pirate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wishing_well_block.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wither_branch.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wither_broken_log.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wither_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wither_chest_top.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wither_log.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wither_log_soul.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wither_planks.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wither_root.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wood_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/blockstates/wood_mimic.json (100%) rename src/{ => main}/resources/assets/treasure2/lang/en_US.lang (100%) rename src/{ => main}/resources/assets/treasure2/lang/es_ES.lang (100%) rename src/{ => main}/resources/assets/treasure2/lang/pl_PL.lang (100%) rename src/{ => main}/resources/assets/treasure2/lang/ru_RU.lang (100%) rename src/{ => main}/resources/assets/treasure2/lang/zh_CN.lang (100%) rename src/{ => main}/resources/assets/treasure2/loot_tables/entities/bound_soul.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/OLD-skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/banded_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/blackstone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/cauldron_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/clam_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/compressor_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/crate.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/crate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/crate_chest_moldy.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/desert_wishing_well_block.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/dread_pirate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/falling_grass.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/falling_red_sand.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/falling_sand.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gold_skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gold_strongbox.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone1.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone1_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone1_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone1_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone1_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone1_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone1_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone1_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone2.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone2_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone2_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone2_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone2_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone2_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone2_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone2_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone3.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone3_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone3_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone3_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone3_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone3_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone3_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/gravestone3_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/high_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/high_poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/high_wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/iron_strongbox.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/ironbound_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/low_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/low_poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/low_wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/med_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/med_poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/med_wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/ore_parent.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/oyster_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/painting.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/painting_blocks_bricks.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/painting_blocks_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/painting_blocks_dirt.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/painting_blocks_lava.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/painting_blocks_sand.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/painting_blocks_water.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/painting_blocks_wood.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/pirate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/proximity_spawner.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/ruby_ore.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/safe.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/sapphire_ore.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/skeleton_bottom.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/skeleton_top.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/skull_and_crossbones.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/spanish_moss.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/spider_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/standard_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/strongbox.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/viking_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/whale_bone_pirate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wishing_well_block.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch1.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch1a.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch1b.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch2.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch2_OLD.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch2a.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch2b.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch3.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch3_OLD.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch3a.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch3b.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch5.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch5_OLD.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch5a.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch5b.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_branch_OLD.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_broken_log.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_broken_log_mossy.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_broken_log_normal.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_chest_top.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_log.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_log_full.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_log_full_OLD.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_log_full_mossy.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_log_normal.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_log_normal_OLD.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_log_normal_mossy.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_log_soul.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_log_stripped.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_planks.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_root1.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_root1a.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_root1b.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_root2.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_root2a.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wither_root2b.json (100%) rename src/{ => main}/resources/assets/treasure2/models/block/wood_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/adephagias_bounty.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/angel_blessed.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/apprentices_pouch.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/black_pearl.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/blackstone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/cauldron_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/charmed_gold_coin.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/charmed_ruby.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/charmed_silver_coin.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/compressor_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/crate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/crate_chest_moldy.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/desert_wishing_well_block.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/diamond_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/diamond_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/dread_pirate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/dwarven_talisman.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/ember_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/ember_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/emerald_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/emerald_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/eye_patch.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/falling_grass.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/falling_red_sand.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/falling_sand.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/fools_coin.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gold_coin.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gold_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gold_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gold_skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gold_strongbox.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone1_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone1_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone1_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone1_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone1_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone1_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone1_spawner_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone1_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone2_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone2_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone2_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone2_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone2_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone2_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone2_spawner_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone2_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone3_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone3_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone3_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone3_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone3_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone3_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone3_spawner_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/gravestone3_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/high_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/high_poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/high_wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/iron_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/iron_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/iron_strongbox.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/ironbound_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/jewelled_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/key_ring.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/leaf_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/leaf_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/lightning_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/low_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/low_poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/low_wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/lucky_pouch.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/masters_pouch.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/med_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/med_poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/med_wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/medics_token.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/metallurgists_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/miners_friend.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/mirthas_torch.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/painting_blocks_bricks.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/painting_blocks_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/painting_blocks_dirt.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/painting_blocks_lava.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/painting_blocks_sand.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/painting_blocks_water.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/painting_blocks_wood.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/pilferers_lock_pick.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/pirate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/pirate_mimic.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/poison_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/pouch.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/proximity_spawner.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/ruby.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/ruby_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/ruby_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/ruby_ore.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/safe.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/salandaars_ward.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/sapphire.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/sapphire_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/sapphire_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/sapphire_ore.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/silver_coin.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/skeleton.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/skeleton_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/skull_and_crossbones.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/skull_sword.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/spanish_moss.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/spider_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/spider_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/spider_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/stone_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/stone_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/thiefs_lock_pick.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/treasure_tab.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/treasure_tool.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/viking_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/whale_bone_pirate_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/white_pearl.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wishing_well_block.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_broken_log.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_chest_top.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_fog.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_log.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_log_soul.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_planks.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_root_item.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wither_stick_item.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wood_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wood_key.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wood_lock.json (100%) rename src/{ => main}/resources/assets/treasure2/models/item/wood_mimic.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/book.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/chests.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/coins.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/fog.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/general.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/keys.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/markers.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/mobs.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/recipes.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/wells.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/chest_recipes.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/chests/list.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/chests.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/coins.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/rarities.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/treasure_hunting.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/wishing_wells.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/key_recipes.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/lock_pick_recipes.json (100%) rename src/{ => main}/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/treasure_tool_recipe.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gold_skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone1_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone1_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone1_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone1_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone1_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone1_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone1_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone2_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone2_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone2_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone2_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone2_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone2_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone2_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone3_mossy_cobblestone.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone3_obsidian.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone3_polished_andesite.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone3_polished_diorite.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone3_polished_granite.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/gravestone3_stone.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/key_ring.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/pilferers_lock_pick.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/pouch.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/ruby_key.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/sapphire_key.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/skull_and_crossbones.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/skull_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/spider_key.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/thiefs_lock_pick.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/treasure_tool.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/wither_key.json (100%) rename src/{ => main}/resources/assets/treasure2/recipes/wither_planks.json (100%) rename src/{ => main}/resources/assets/treasure2/structures/aboveground/crypt2.nbt (100%) rename src/{ => main}/resources/assets/treasure2/structures/aboveground/crypt3.nbt (100%) rename src/{ => main}/resources/assets/treasure2/structures/underground/basic1.nbt (100%) rename src/{ => main}/resources/assets/treasure2/structures/underground/basic2.nbt (100%) rename src/{ => main}/resources/assets/treasure2/structures/underground/basic3.nbt (100%) rename src/{ => main}/resources/assets/treasure2/structures/underground/basic4.nbt (100%) rename src/{ => main}/resources/assets/treasure2/structures/underground/basic5.nbt (100%) rename src/{ => main}/resources/assets/treasure2/structures/underground/cave1.nbt (100%) rename src/{ => main}/resources/assets/treasure2/structures/underground/cave2.nbt (100%) rename src/{ => main}/resources/assets/treasure2/structures/underground/cobb1.nbt (100%) rename src/{ => main}/resources/assets/treasure2/structures/underground/crypt1.nbt (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/blackstone.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/blackstone_top.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/SpiderChest2ItemBlock.bbmodel (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/band.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/cauldron_chest_front.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/cauldron_chest_side.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/compressor_chest_side.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/compressor_chest_up.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/crate_chest_board.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/crate_chest_metal.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/crate_chest_moldy_board.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/crate_chest_moldy_north.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/crate_chest_north.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_iron.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_lid_side.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_side.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/dread_pirate_skull_front.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/dread_pirate_skull_mouth.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/gold_skull_eyes.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/gold_skull_mouth_front.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/gold_skull_texture.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_chest.json (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_foot.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_front.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_pad.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_side.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_up.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_foot.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_front.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_pad.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_side.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_up.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/pirate_chest_east.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/pirate_chest_east2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/pirate_chest_north.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/pirate_chest_up.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/safe-foot.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/safe-handle.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/safe-side.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/skull_eyes.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/skull_mouth_front.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/skull_texture.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/spider_body.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/spider_head.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/spider_legs.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/viking-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/wither_chest_east.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/wither_chest_front.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/wood_chest_east.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/wood_chest_north.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/chests/wood_chest_up.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/crossbone.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/fog.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_bricks.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_cobblestone.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_dirt.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_lava.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_sand.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_water.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_wood.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/paintings/painting_frame.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/poison_fog.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/ruby_nugget.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/sapphire_nugget.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/skeleton_body.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/skeleton_bottom.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/skeleton_head.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/skull_east.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/skull_grave1.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/skull_north.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/skull_south.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/skullandcrossbones.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/spanish_moss.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_branch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_fog.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_log.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_log_2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_log_OLD.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_log_face.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_log_mossy.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_log_top.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_log_top_2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_log_top_OLD.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_moss.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/blocks/wither_planks.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/cauldron-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/clam-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/compressor-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/crate-chest-moldy.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/crate-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/dread-pirate-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/gold-skull-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/gold-strongbox.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/iron-strongbox.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/ironbound-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/oyster-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/pirate-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/safe.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/skull-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/spider-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/standard-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/test-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/viking-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/whale-bone-pirate-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/wither-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/chest/wood-chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/mob/bound-soul.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/mob/pirate-mimic.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/entity/mob/wood-mimic.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/apprentices_pouch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/armoire.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/compressor_chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/key_ring.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/lucky_pouch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/masters_pouch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/mollusc_chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/pouch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/skull_chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/strongbox.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/treasure_chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/container/wither_chest.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/church1.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard1.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard3.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard4.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/sunkenship1.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/sunkenship2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/tower1.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/tower2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/tower3.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/well1.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/withergrove1.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/gui/patchouli/guide/withergrove2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/32/iron_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/New Microsoft Publisher Document.pub (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/apprentices_pouch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/arcane_pouch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/black_pearl_10.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/black_pearl_12.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/charmed_ruby.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/charmed_sapphire.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/coins/charmed_gold_coin.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/coins/charmed_silver_coin.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/coins/gold_coin.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/coins/silver_coin.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/eye_patch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/diamond_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/ember_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/emerald_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/gold_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/iron_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/jewelled_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/key_ring.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/key_ring_old.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/leaf_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/lightning_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/metallurgists_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/pilferers_lock_pick.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/ruby_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/sapphire_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/skeleton_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/spider_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/stone_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/thiefs_lock_pick.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/wither_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/keys/wood_key.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/diamond_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/ember_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/emerald_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/gold_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/iron_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/leaf_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/ruby_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/ruby_lock2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/sapphire_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/sapphire_lock2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/spider_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/stone_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/wither_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/locks/wood_lock.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/lucky_pouch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/masters_pouch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/oyster_meat.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/painting_item1x1.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/painting_item2x1.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/pouch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/ruby.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/sapphire.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/skeleton_item.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/skull_sword.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/treasure_tab.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/treasure_tab_old.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/treasure_tool.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/white_pearl.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/white_pearl_10.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/white_pearl_12.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/wither_root.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/items/wither_stick.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/models/armor/eye_patch.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/models/armor/eye_patch_model.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/mist_particle.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/mist_particle2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/mist_particle3.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/mist_particle4.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/poison_mist_particle.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/poison_mist_particle2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/poison_mist_particle3.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/poison_mist_particle4.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/wither_mist_particle.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/wither_mist_particle2.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/wither_mist_particle3.png (100%) rename src/{ => main}/resources/assets/treasure2/textures/particle/wither_mist_particle4.png (100%) rename src/{ => main}/resources/decay/treasure2/aged_ruleset.json (100%) rename src/{ => main}/resources/decay/treasure2/default_ruleset.json (100%) rename src/{ => main}/resources/decay/treasure2/ruinous_ruleset.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/armor/common.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/armor/rare.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/armor/scarce.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/armor/uncommon.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/common/armor_tool_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/common/food_potion_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/common/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/epic/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/rare/armor_tool_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/rare/food_potion_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/rare/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/scarce/armor_tool_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/scarce/food_potion_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/scarce/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/uncommon/armor_tool_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/uncommon/food_potion_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/chests/uncommon/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/food/common.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/food/scarce.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/food/uncommon.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/items/common.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/items/epic.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/items/rare.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/items/scarce.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/items/uncommon.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/tools/common.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/tools/rare.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/tools/scarce.json (100%) rename src/{ => main}/resources/loot_tables/mocreatures/tools/uncommon.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/armor/epic.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/armor/rare.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/armor/scarce.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/chests/epic/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/chests/rare/armor_tool_chest.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/chests/rare/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/chests/scarce/armor_tool_chest.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/chests/scarce/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/items/epic.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/items/rare.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/items/scarce.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/tools/epic.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/tools/rare.json (100%) rename src/{ => main}/resources/loot_tables/sgs_metals/tools/scarce.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/armor/common.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/armor/epic.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/armor/rare.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/armor/scarce.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/armor/uncommon.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/common/food_potion_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/common/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/epic/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/rare/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/scarce/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/special/black_pearl_well.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/special/cauldron_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/special/gold_skull_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/special/skull_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/special/white_pearl_well.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/special/wither_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/chests/uncommon/general_chest.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/food/common.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/food/epic.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/food/rare.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/food/scarce.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/food/uncommon.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/items/common.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/items/epic.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/items/rare.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/items/scarce.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/items/uncommon.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/potions/common.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/potions/epic.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/potions/rare.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/potions/scarce.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/potions/uncommon.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/tools/common.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/tools/epic.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/tools/rare.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/tools/scarce.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/tools/uncommon.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/treasure/common.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/treasure/epic.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/treasure/epic_charms.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/treasure/rare.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/treasure/rare_charms.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/treasure/scarce.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/treasure/scarce_charms.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/treasure/uncommon.json (100%) rename src/{ => main}/resources/loot_tables/treasure2/treasure/uncommon_charms.json (100%) rename src/{ => main}/resources/mcmod.info (100%) rename src/{ => main}/resources/meta/treasure2/structures/basic1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/basic2.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/basic3.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/basic4.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/basic5.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/beached-ship1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/beached-ship2.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/beached-ship3.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/blacksmith1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/canopy-wishing-well1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/castle1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/cave1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/cave2.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/church1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/cobb1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/crypt1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/crypt2.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/crypt3.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/desert-tower2.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/desert-wishing-well1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/desert-wishing-well2.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/dingy1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/fortress1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/house1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/ionic1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/iron-chamber1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/iron-chamber2.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/large-tower1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/mine1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/obsidian-chamber1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/pirate-chamber1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/simple-well1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/sunken-ship1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/sunken-ship2.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/sunken-ship3.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/tower1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/tower2.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/tower3.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/tower4.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/tower5.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/underwater-ruin1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/underwater-ruins2.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/underwater-ruins3.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/wither-chamber1.json (100%) rename src/{ => main}/resources/meta/treasure2/structures/wood-draw-wishing-well1.json (100%) rename src/{ => main}/resources/structures/treasure2/submerged/dingy1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/submerged/sunken-ship1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/submerged/sunken-ship2.nbt (100%) rename src/{ => main}/resources/structures/treasure2/submerged/sunken-ship3.nbt (100%) rename src/{ => main}/resources/structures/treasure2/submerged/underwater-ruin1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/submerged/underwater-ruins2.nbt (100%) rename src/{ => main}/resources/structures/treasure2/submerged/underwater-ruins3.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/basic1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/basic2.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/basic3.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/basic4.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/basic5.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/cave1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/cave2.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/cobb1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/crypt1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/ionic1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/iron-chamber1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/iron-chamber2.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/mine1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/obsidian-chamber1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/pirate-chamber1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/subterranean/wither-chamber1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/beached-ship1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/beached-ship2.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/beached-ship3.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/blacksmith1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/castle1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/church1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/crypt2.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/crypt3.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/desert-tower2.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/fortress1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/house1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/large-tower1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/tower1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/tower2.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/tower3.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/tower4.nbt (100%) rename src/{ => main}/resources/structures/treasure2/surface/tower5.nbt (100%) rename src/{ => main}/resources/structures/treasure2/wells/canopy-wishing-well1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/wells/desert-wishing-well1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/wells/desert-wishing-well2.nbt (100%) rename src/{ => main}/resources/structures/treasure2/wells/simple-well1.nbt (100%) rename src/{ => main}/resources/structures/treasure2/wells/wood-draw-wishing-well1.nbt (100%) rename src/{ => main}/resources/treasure2-curseforge-logo.png (100%) rename src/{ => main}/resources/treasure2-github-logo.png (100%) diff --git a/src/resources/assets/treasure2/advancements/recipes/gold_skull_chest.json b/src/main/resources/assets/treasure2/advancements/recipes/gold_skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/gold_skull_chest.json rename to src/main/resources/assets/treasure2/advancements/recipes/gold_skull_chest.json diff --git a/src/resources/assets/treasure2/advancements/recipes/key_ring.json b/src/main/resources/assets/treasure2/advancements/recipes/key_ring.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/key_ring.json rename to src/main/resources/assets/treasure2/advancements/recipes/key_ring.json diff --git a/src/resources/assets/treasure2/advancements/recipes/pilferers_lock_pick.json b/src/main/resources/assets/treasure2/advancements/recipes/pilferers_lock_pick.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/pilferers_lock_pick.json rename to src/main/resources/assets/treasure2/advancements/recipes/pilferers_lock_pick.json diff --git a/src/resources/assets/treasure2/advancements/recipes/ruby_key.json b/src/main/resources/assets/treasure2/advancements/recipes/ruby_key.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/ruby_key.json rename to src/main/resources/assets/treasure2/advancements/recipes/ruby_key.json diff --git a/src/resources/assets/treasure2/advancements/recipes/sapphire_key.json b/src/main/resources/assets/treasure2/advancements/recipes/sapphire_key.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/sapphire_key.json rename to src/main/resources/assets/treasure2/advancements/recipes/sapphire_key.json diff --git a/src/resources/assets/treasure2/advancements/recipes/skull_chest.json b/src/main/resources/assets/treasure2/advancements/recipes/skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/skull_chest.json rename to src/main/resources/assets/treasure2/advancements/recipes/skull_chest.json diff --git a/src/resources/assets/treasure2/advancements/recipes/spider_key.json b/src/main/resources/assets/treasure2/advancements/recipes/spider_key.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/spider_key.json rename to src/main/resources/assets/treasure2/advancements/recipes/spider_key.json diff --git a/src/resources/assets/treasure2/advancements/recipes/thiefs_lock_pick.json b/src/main/resources/assets/treasure2/advancements/recipes/thiefs_lock_pick.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/thiefs_lock_pick.json rename to src/main/resources/assets/treasure2/advancements/recipes/thiefs_lock_pick.json diff --git a/src/resources/assets/treasure2/advancements/recipes/treasure_tool.json b/src/main/resources/assets/treasure2/advancements/recipes/treasure_tool.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/treasure_tool.json rename to src/main/resources/assets/treasure2/advancements/recipes/treasure_tool.json diff --git a/src/resources/assets/treasure2/advancements/recipes/wither_key.json b/src/main/resources/assets/treasure2/advancements/recipes/wither_key.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/wither_key.json rename to src/main/resources/assets/treasure2/advancements/recipes/wither_key.json diff --git a/src/resources/assets/treasure2/advancements/recipes/wither_planks.json b/src/main/resources/assets/treasure2/advancements/recipes/wither_planks.json similarity index 100% rename from src/resources/assets/treasure2/advancements/recipes/wither_planks.json rename to src/main/resources/assets/treasure2/advancements/recipes/wither_planks.json diff --git a/src/resources/assets/treasure2/blockstates/blackstone.json b/src/main/resources/assets/treasure2/blockstates/blackstone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/blackstone.json rename to src/main/resources/assets/treasure2/blockstates/blackstone.json diff --git a/src/resources/assets/treasure2/blockstates/cauldron_chest.json b/src/main/resources/assets/treasure2/blockstates/cauldron_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/cauldron_chest.json rename to src/main/resources/assets/treasure2/blockstates/cauldron_chest.json diff --git a/src/resources/assets/treasure2/blockstates/compressor_chest.json b/src/main/resources/assets/treasure2/blockstates/compressor_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/compressor_chest.json rename to src/main/resources/assets/treasure2/blockstates/compressor_chest.json diff --git a/src/resources/assets/treasure2/blockstates/crate_chest.json b/src/main/resources/assets/treasure2/blockstates/crate_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/crate_chest.json rename to src/main/resources/assets/treasure2/blockstates/crate_chest.json diff --git a/src/resources/assets/treasure2/blockstates/crate_chest_moldy.json b/src/main/resources/assets/treasure2/blockstates/crate_chest_moldy.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/crate_chest_moldy.json rename to src/main/resources/assets/treasure2/blockstates/crate_chest_moldy.json diff --git a/src/resources/assets/treasure2/blockstates/desert_wishing_well_block.json b/src/main/resources/assets/treasure2/blockstates/desert_wishing_well_block.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/desert_wishing_well_block.json rename to src/main/resources/assets/treasure2/blockstates/desert_wishing_well_block.json diff --git a/src/resources/assets/treasure2/blockstates/dread_pirate_chest.json b/src/main/resources/assets/treasure2/blockstates/dread_pirate_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/dread_pirate_chest.json rename to src/main/resources/assets/treasure2/blockstates/dread_pirate_chest.json diff --git a/src/resources/assets/treasure2/blockstates/falling_grass.json b/src/main/resources/assets/treasure2/blockstates/falling_grass.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/falling_grass.json rename to src/main/resources/assets/treasure2/blockstates/falling_grass.json diff --git a/src/resources/assets/treasure2/blockstates/falling_red_sand.json b/src/main/resources/assets/treasure2/blockstates/falling_red_sand.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/falling_red_sand.json rename to src/main/resources/assets/treasure2/blockstates/falling_red_sand.json diff --git a/src/resources/assets/treasure2/blockstates/falling_sand.json b/src/main/resources/assets/treasure2/blockstates/falling_sand.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/falling_sand.json rename to src/main/resources/assets/treasure2/blockstates/falling_sand.json diff --git a/src/resources/assets/treasure2/blockstates/fog.json b/src/main/resources/assets/treasure2/blockstates/fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/fog.json rename to src/main/resources/assets/treasure2/blockstates/fog.json diff --git a/src/resources/assets/treasure2/blockstates/gold_skull_chest.json b/src/main/resources/assets/treasure2/blockstates/gold_skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gold_skull_chest.json rename to src/main/resources/assets/treasure2/blockstates/gold_skull_chest.json diff --git a/src/resources/assets/treasure2/blockstates/gold_strongbox.json b/src/main/resources/assets/treasure2/blockstates/gold_strongbox.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gold_strongbox.json rename to src/main/resources/assets/treasure2/blockstates/gold_strongbox.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone1_cobblestone.json b/src/main/resources/assets/treasure2/blockstates/gravestone1_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone1_cobblestone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone1_cobblestone.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone1_mossy_cobblestone.json b/src/main/resources/assets/treasure2/blockstates/gravestone1_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone1_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone1_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone1_obsidian.json b/src/main/resources/assets/treasure2/blockstates/gravestone1_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone1_obsidian.json rename to src/main/resources/assets/treasure2/blockstates/gravestone1_obsidian.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone1_polished_andesite.json b/src/main/resources/assets/treasure2/blockstates/gravestone1_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone1_polished_andesite.json rename to src/main/resources/assets/treasure2/blockstates/gravestone1_polished_andesite.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone1_polished_diorite.json b/src/main/resources/assets/treasure2/blockstates/gravestone1_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone1_polished_diorite.json rename to src/main/resources/assets/treasure2/blockstates/gravestone1_polished_diorite.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone1_polished_granite.json b/src/main/resources/assets/treasure2/blockstates/gravestone1_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone1_polished_granite.json rename to src/main/resources/assets/treasure2/blockstates/gravestone1_polished_granite.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone1_spawner_stone.json b/src/main/resources/assets/treasure2/blockstates/gravestone1_spawner_stone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone1_spawner_stone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone1_spawner_stone.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone1_stone.json b/src/main/resources/assets/treasure2/blockstates/gravestone1_stone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone1_stone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone1_stone.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone2_cobblestone.json b/src/main/resources/assets/treasure2/blockstates/gravestone2_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone2_cobblestone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone2_cobblestone.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone2_mossy_cobblestone.json b/src/main/resources/assets/treasure2/blockstates/gravestone2_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone2_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone2_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone2_obsidian.json b/src/main/resources/assets/treasure2/blockstates/gravestone2_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone2_obsidian.json rename to src/main/resources/assets/treasure2/blockstates/gravestone2_obsidian.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone2_polished_andesite.json b/src/main/resources/assets/treasure2/blockstates/gravestone2_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone2_polished_andesite.json rename to src/main/resources/assets/treasure2/blockstates/gravestone2_polished_andesite.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone2_polished_diorite.json b/src/main/resources/assets/treasure2/blockstates/gravestone2_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone2_polished_diorite.json rename to src/main/resources/assets/treasure2/blockstates/gravestone2_polished_diorite.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone2_polished_granite.json b/src/main/resources/assets/treasure2/blockstates/gravestone2_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone2_polished_granite.json rename to src/main/resources/assets/treasure2/blockstates/gravestone2_polished_granite.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone2_spawner_cobblestone.json b/src/main/resources/assets/treasure2/blockstates/gravestone2_spawner_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone2_spawner_cobblestone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone2_spawner_cobblestone.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone2_stone.json b/src/main/resources/assets/treasure2/blockstates/gravestone2_stone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone2_stone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone2_stone.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone3_cobblestone.json b/src/main/resources/assets/treasure2/blockstates/gravestone3_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone3_cobblestone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone3_cobblestone.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone3_mossy_cobblestone.json b/src/main/resources/assets/treasure2/blockstates/gravestone3_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone3_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone3_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone3_obsidian.json b/src/main/resources/assets/treasure2/blockstates/gravestone3_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone3_obsidian.json rename to src/main/resources/assets/treasure2/blockstates/gravestone3_obsidian.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone3_polished_andesite.json b/src/main/resources/assets/treasure2/blockstates/gravestone3_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone3_polished_andesite.json rename to src/main/resources/assets/treasure2/blockstates/gravestone3_polished_andesite.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone3_polished_diorite.json b/src/main/resources/assets/treasure2/blockstates/gravestone3_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone3_polished_diorite.json rename to src/main/resources/assets/treasure2/blockstates/gravestone3_polished_diorite.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone3_polished_granite.json b/src/main/resources/assets/treasure2/blockstates/gravestone3_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone3_polished_granite.json rename to src/main/resources/assets/treasure2/blockstates/gravestone3_polished_granite.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone3_spawner_obsidian.json b/src/main/resources/assets/treasure2/blockstates/gravestone3_spawner_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone3_spawner_obsidian.json rename to src/main/resources/assets/treasure2/blockstates/gravestone3_spawner_obsidian.json diff --git a/src/resources/assets/treasure2/blockstates/gravestone3_stone.json b/src/main/resources/assets/treasure2/blockstates/gravestone3_stone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/gravestone3_stone.json rename to src/main/resources/assets/treasure2/blockstates/gravestone3_stone.json diff --git a/src/resources/assets/treasure2/blockstates/high_fog.json b/src/main/resources/assets/treasure2/blockstates/high_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/high_fog.json rename to src/main/resources/assets/treasure2/blockstates/high_fog.json diff --git a/src/resources/assets/treasure2/blockstates/high_poison_fog.json b/src/main/resources/assets/treasure2/blockstates/high_poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/high_poison_fog.json rename to src/main/resources/assets/treasure2/blockstates/high_poison_fog.json diff --git a/src/resources/assets/treasure2/blockstates/high_wither_fog.json b/src/main/resources/assets/treasure2/blockstates/high_wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/high_wither_fog.json rename to src/main/resources/assets/treasure2/blockstates/high_wither_fog.json diff --git a/src/resources/assets/treasure2/blockstates/iron_strongbox.json b/src/main/resources/assets/treasure2/blockstates/iron_strongbox.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/iron_strongbox.json rename to src/main/resources/assets/treasure2/blockstates/iron_strongbox.json diff --git a/src/resources/assets/treasure2/blockstates/ironbound_chest.json b/src/main/resources/assets/treasure2/blockstates/ironbound_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/ironbound_chest.json rename to src/main/resources/assets/treasure2/blockstates/ironbound_chest.json diff --git a/src/resources/assets/treasure2/blockstates/low_fog.json b/src/main/resources/assets/treasure2/blockstates/low_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/low_fog.json rename to src/main/resources/assets/treasure2/blockstates/low_fog.json diff --git a/src/resources/assets/treasure2/blockstates/low_poison_fog.json b/src/main/resources/assets/treasure2/blockstates/low_poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/low_poison_fog.json rename to src/main/resources/assets/treasure2/blockstates/low_poison_fog.json diff --git a/src/resources/assets/treasure2/blockstates/low_wither_fog.json b/src/main/resources/assets/treasure2/blockstates/low_wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/low_wither_fog.json rename to src/main/resources/assets/treasure2/blockstates/low_wither_fog.json diff --git a/src/resources/assets/treasure2/blockstates/med_fog.json b/src/main/resources/assets/treasure2/blockstates/med_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/med_fog.json rename to src/main/resources/assets/treasure2/blockstates/med_fog.json diff --git a/src/resources/assets/treasure2/blockstates/med_poison_fog.json b/src/main/resources/assets/treasure2/blockstates/med_poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/med_poison_fog.json rename to src/main/resources/assets/treasure2/blockstates/med_poison_fog.json diff --git a/src/resources/assets/treasure2/blockstates/med_wither_fog.json b/src/main/resources/assets/treasure2/blockstates/med_wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/med_wither_fog.json rename to src/main/resources/assets/treasure2/blockstates/med_wither_fog.json diff --git a/src/resources/assets/treasure2/blockstates/oyster_chest.json b/src/main/resources/assets/treasure2/blockstates/oyster_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/oyster_chest.json rename to src/main/resources/assets/treasure2/blockstates/oyster_chest.json diff --git a/src/resources/assets/treasure2/blockstates/painting_blocks_bricks.json b/src/main/resources/assets/treasure2/blockstates/painting_blocks_bricks.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/painting_blocks_bricks.json rename to src/main/resources/assets/treasure2/blockstates/painting_blocks_bricks.json diff --git a/src/resources/assets/treasure2/blockstates/painting_blocks_cobblestone.json b/src/main/resources/assets/treasure2/blockstates/painting_blocks_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/painting_blocks_cobblestone.json rename to src/main/resources/assets/treasure2/blockstates/painting_blocks_cobblestone.json diff --git a/src/resources/assets/treasure2/blockstates/painting_blocks_dirt.json b/src/main/resources/assets/treasure2/blockstates/painting_blocks_dirt.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/painting_blocks_dirt.json rename to src/main/resources/assets/treasure2/blockstates/painting_blocks_dirt.json diff --git a/src/resources/assets/treasure2/blockstates/painting_blocks_lava.json b/src/main/resources/assets/treasure2/blockstates/painting_blocks_lava.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/painting_blocks_lava.json rename to src/main/resources/assets/treasure2/blockstates/painting_blocks_lava.json diff --git a/src/resources/assets/treasure2/blockstates/painting_blocks_sand.json b/src/main/resources/assets/treasure2/blockstates/painting_blocks_sand.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/painting_blocks_sand.json rename to src/main/resources/assets/treasure2/blockstates/painting_blocks_sand.json diff --git a/src/resources/assets/treasure2/blockstates/painting_blocks_water.json b/src/main/resources/assets/treasure2/blockstates/painting_blocks_water.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/painting_blocks_water.json rename to src/main/resources/assets/treasure2/blockstates/painting_blocks_water.json diff --git a/src/resources/assets/treasure2/blockstates/painting_blocks_wood.json b/src/main/resources/assets/treasure2/blockstates/painting_blocks_wood.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/painting_blocks_wood.json rename to src/main/resources/assets/treasure2/blockstates/painting_blocks_wood.json diff --git a/src/resources/assets/treasure2/blockstates/pirate_chest.json b/src/main/resources/assets/treasure2/blockstates/pirate_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/pirate_chest.json rename to src/main/resources/assets/treasure2/blockstates/pirate_chest.json diff --git a/src/resources/assets/treasure2/blockstates/pirate_mimic.json b/src/main/resources/assets/treasure2/blockstates/pirate_mimic.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/pirate_mimic.json rename to src/main/resources/assets/treasure2/blockstates/pirate_mimic.json diff --git a/src/resources/assets/treasure2/blockstates/poison_fog.json b/src/main/resources/assets/treasure2/blockstates/poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/poison_fog.json rename to src/main/resources/assets/treasure2/blockstates/poison_fog.json diff --git a/src/resources/assets/treasure2/blockstates/proximity_spawner.json b/src/main/resources/assets/treasure2/blockstates/proximity_spawner.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/proximity_spawner.json rename to src/main/resources/assets/treasure2/blockstates/proximity_spawner.json diff --git a/src/resources/assets/treasure2/blockstates/ruby_ore.json b/src/main/resources/assets/treasure2/blockstates/ruby_ore.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/ruby_ore.json rename to src/main/resources/assets/treasure2/blockstates/ruby_ore.json diff --git a/src/resources/assets/treasure2/blockstates/safe.json b/src/main/resources/assets/treasure2/blockstates/safe.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/safe.json rename to src/main/resources/assets/treasure2/blockstates/safe.json diff --git a/src/resources/assets/treasure2/blockstates/sapphire_ore.json b/src/main/resources/assets/treasure2/blockstates/sapphire_ore.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/sapphire_ore.json rename to src/main/resources/assets/treasure2/blockstates/sapphire_ore.json diff --git a/src/resources/assets/treasure2/blockstates/skeleton.json b/src/main/resources/assets/treasure2/blockstates/skeleton.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/skeleton.json rename to src/main/resources/assets/treasure2/blockstates/skeleton.json diff --git a/src/resources/assets/treasure2/blockstates/skull_and_crossbones.json b/src/main/resources/assets/treasure2/blockstates/skull_and_crossbones.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/skull_and_crossbones.json rename to src/main/resources/assets/treasure2/blockstates/skull_and_crossbones.json diff --git a/src/resources/assets/treasure2/blockstates/skull_chest.json b/src/main/resources/assets/treasure2/blockstates/skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/skull_chest.json rename to src/main/resources/assets/treasure2/blockstates/skull_chest.json diff --git a/src/resources/assets/treasure2/blockstates/spanish_moss.json b/src/main/resources/assets/treasure2/blockstates/spanish_moss.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/spanish_moss.json rename to src/main/resources/assets/treasure2/blockstates/spanish_moss.json diff --git a/src/resources/assets/treasure2/blockstates/spider_chest.json b/src/main/resources/assets/treasure2/blockstates/spider_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/spider_chest.json rename to src/main/resources/assets/treasure2/blockstates/spider_chest.json diff --git a/src/resources/assets/treasure2/blockstates/viking_chest.json b/src/main/resources/assets/treasure2/blockstates/viking_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/viking_chest.json rename to src/main/resources/assets/treasure2/blockstates/viking_chest.json diff --git a/src/resources/assets/treasure2/blockstates/whale_bone_pirate_chest.json b/src/main/resources/assets/treasure2/blockstates/whale_bone_pirate_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/whale_bone_pirate_chest.json rename to src/main/resources/assets/treasure2/blockstates/whale_bone_pirate_chest.json diff --git a/src/resources/assets/treasure2/blockstates/wishing_well_block.json b/src/main/resources/assets/treasure2/blockstates/wishing_well_block.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wishing_well_block.json rename to src/main/resources/assets/treasure2/blockstates/wishing_well_block.json diff --git a/src/resources/assets/treasure2/blockstates/wither_branch.json b/src/main/resources/assets/treasure2/blockstates/wither_branch.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wither_branch.json rename to src/main/resources/assets/treasure2/blockstates/wither_branch.json diff --git a/src/resources/assets/treasure2/blockstates/wither_broken_log.json b/src/main/resources/assets/treasure2/blockstates/wither_broken_log.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wither_broken_log.json rename to src/main/resources/assets/treasure2/blockstates/wither_broken_log.json diff --git a/src/resources/assets/treasure2/blockstates/wither_chest.json b/src/main/resources/assets/treasure2/blockstates/wither_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wither_chest.json rename to src/main/resources/assets/treasure2/blockstates/wither_chest.json diff --git a/src/resources/assets/treasure2/blockstates/wither_chest_top.json b/src/main/resources/assets/treasure2/blockstates/wither_chest_top.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wither_chest_top.json rename to src/main/resources/assets/treasure2/blockstates/wither_chest_top.json diff --git a/src/resources/assets/treasure2/blockstates/wither_fog.json b/src/main/resources/assets/treasure2/blockstates/wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wither_fog.json rename to src/main/resources/assets/treasure2/blockstates/wither_fog.json diff --git a/src/resources/assets/treasure2/blockstates/wither_log.json b/src/main/resources/assets/treasure2/blockstates/wither_log.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wither_log.json rename to src/main/resources/assets/treasure2/blockstates/wither_log.json diff --git a/src/resources/assets/treasure2/blockstates/wither_log_soul.json b/src/main/resources/assets/treasure2/blockstates/wither_log_soul.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wither_log_soul.json rename to src/main/resources/assets/treasure2/blockstates/wither_log_soul.json diff --git a/src/resources/assets/treasure2/blockstates/wither_planks.json b/src/main/resources/assets/treasure2/blockstates/wither_planks.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wither_planks.json rename to src/main/resources/assets/treasure2/blockstates/wither_planks.json diff --git a/src/resources/assets/treasure2/blockstates/wither_root.json b/src/main/resources/assets/treasure2/blockstates/wither_root.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wither_root.json rename to src/main/resources/assets/treasure2/blockstates/wither_root.json diff --git a/src/resources/assets/treasure2/blockstates/wood_chest.json b/src/main/resources/assets/treasure2/blockstates/wood_chest.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wood_chest.json rename to src/main/resources/assets/treasure2/blockstates/wood_chest.json diff --git a/src/resources/assets/treasure2/blockstates/wood_mimic.json b/src/main/resources/assets/treasure2/blockstates/wood_mimic.json similarity index 100% rename from src/resources/assets/treasure2/blockstates/wood_mimic.json rename to src/main/resources/assets/treasure2/blockstates/wood_mimic.json diff --git a/src/resources/assets/treasure2/lang/en_US.lang b/src/main/resources/assets/treasure2/lang/en_US.lang similarity index 100% rename from src/resources/assets/treasure2/lang/en_US.lang rename to src/main/resources/assets/treasure2/lang/en_US.lang diff --git a/src/resources/assets/treasure2/lang/es_ES.lang b/src/main/resources/assets/treasure2/lang/es_ES.lang similarity index 100% rename from src/resources/assets/treasure2/lang/es_ES.lang rename to src/main/resources/assets/treasure2/lang/es_ES.lang diff --git a/src/resources/assets/treasure2/lang/pl_PL.lang b/src/main/resources/assets/treasure2/lang/pl_PL.lang similarity index 100% rename from src/resources/assets/treasure2/lang/pl_PL.lang rename to src/main/resources/assets/treasure2/lang/pl_PL.lang diff --git a/src/resources/assets/treasure2/lang/ru_RU.lang b/src/main/resources/assets/treasure2/lang/ru_RU.lang similarity index 100% rename from src/resources/assets/treasure2/lang/ru_RU.lang rename to src/main/resources/assets/treasure2/lang/ru_RU.lang diff --git a/src/resources/assets/treasure2/lang/zh_CN.lang b/src/main/resources/assets/treasure2/lang/zh_CN.lang similarity index 100% rename from src/resources/assets/treasure2/lang/zh_CN.lang rename to src/main/resources/assets/treasure2/lang/zh_CN.lang diff --git a/src/resources/assets/treasure2/loot_tables/entities/bound_soul.json b/src/main/resources/assets/treasure2/loot_tables/entities/bound_soul.json similarity index 100% rename from src/resources/assets/treasure2/loot_tables/entities/bound_soul.json rename to src/main/resources/assets/treasure2/loot_tables/entities/bound_soul.json diff --git a/src/resources/assets/treasure2/models/block/OLD-skull_chest.json b/src/main/resources/assets/treasure2/models/block/OLD-skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/OLD-skull_chest.json rename to src/main/resources/assets/treasure2/models/block/OLD-skull_chest.json diff --git a/src/resources/assets/treasure2/models/block/banded_chest.json b/src/main/resources/assets/treasure2/models/block/banded_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/banded_chest.json rename to src/main/resources/assets/treasure2/models/block/banded_chest.json diff --git a/src/resources/assets/treasure2/models/block/blackstone.json b/src/main/resources/assets/treasure2/models/block/blackstone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/blackstone.json rename to src/main/resources/assets/treasure2/models/block/blackstone.json diff --git a/src/resources/assets/treasure2/models/block/cauldron_chest.json b/src/main/resources/assets/treasure2/models/block/cauldron_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/cauldron_chest.json rename to src/main/resources/assets/treasure2/models/block/cauldron_chest.json diff --git a/src/resources/assets/treasure2/models/block/clam_chest.json b/src/main/resources/assets/treasure2/models/block/clam_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/clam_chest.json rename to src/main/resources/assets/treasure2/models/block/clam_chest.json diff --git a/src/resources/assets/treasure2/models/block/compressor_chest.json b/src/main/resources/assets/treasure2/models/block/compressor_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/compressor_chest.json rename to src/main/resources/assets/treasure2/models/block/compressor_chest.json diff --git a/src/resources/assets/treasure2/models/block/crate.json b/src/main/resources/assets/treasure2/models/block/crate.json similarity index 100% rename from src/resources/assets/treasure2/models/block/crate.json rename to src/main/resources/assets/treasure2/models/block/crate.json diff --git a/src/resources/assets/treasure2/models/block/crate_chest.json b/src/main/resources/assets/treasure2/models/block/crate_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/crate_chest.json rename to src/main/resources/assets/treasure2/models/block/crate_chest.json diff --git a/src/resources/assets/treasure2/models/block/crate_chest_moldy.json b/src/main/resources/assets/treasure2/models/block/crate_chest_moldy.json similarity index 100% rename from src/resources/assets/treasure2/models/block/crate_chest_moldy.json rename to src/main/resources/assets/treasure2/models/block/crate_chest_moldy.json diff --git a/src/resources/assets/treasure2/models/block/desert_wishing_well_block.json b/src/main/resources/assets/treasure2/models/block/desert_wishing_well_block.json similarity index 100% rename from src/resources/assets/treasure2/models/block/desert_wishing_well_block.json rename to src/main/resources/assets/treasure2/models/block/desert_wishing_well_block.json diff --git a/src/resources/assets/treasure2/models/block/dread_pirate_chest.json b/src/main/resources/assets/treasure2/models/block/dread_pirate_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/dread_pirate_chest.json rename to src/main/resources/assets/treasure2/models/block/dread_pirate_chest.json diff --git a/src/resources/assets/treasure2/models/block/falling_grass.json b/src/main/resources/assets/treasure2/models/block/falling_grass.json similarity index 100% rename from src/resources/assets/treasure2/models/block/falling_grass.json rename to src/main/resources/assets/treasure2/models/block/falling_grass.json diff --git a/src/resources/assets/treasure2/models/block/falling_red_sand.json b/src/main/resources/assets/treasure2/models/block/falling_red_sand.json similarity index 100% rename from src/resources/assets/treasure2/models/block/falling_red_sand.json rename to src/main/resources/assets/treasure2/models/block/falling_red_sand.json diff --git a/src/resources/assets/treasure2/models/block/falling_sand.json b/src/main/resources/assets/treasure2/models/block/falling_sand.json similarity index 100% rename from src/resources/assets/treasure2/models/block/falling_sand.json rename to src/main/resources/assets/treasure2/models/block/falling_sand.json diff --git a/src/resources/assets/treasure2/models/block/fog.json b/src/main/resources/assets/treasure2/models/block/fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/fog.json rename to src/main/resources/assets/treasure2/models/block/fog.json diff --git a/src/resources/assets/treasure2/models/block/gold_skull_chest.json b/src/main/resources/assets/treasure2/models/block/gold_skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gold_skull_chest.json rename to src/main/resources/assets/treasure2/models/block/gold_skull_chest.json diff --git a/src/resources/assets/treasure2/models/block/gold_strongbox.json b/src/main/resources/assets/treasure2/models/block/gold_strongbox.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gold_strongbox.json rename to src/main/resources/assets/treasure2/models/block/gold_strongbox.json diff --git a/src/resources/assets/treasure2/models/block/gravestone1.json b/src/main/resources/assets/treasure2/models/block/gravestone1.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone1.json rename to src/main/resources/assets/treasure2/models/block/gravestone1.json diff --git a/src/resources/assets/treasure2/models/block/gravestone1_cobblestone.json b/src/main/resources/assets/treasure2/models/block/gravestone1_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone1_cobblestone.json rename to src/main/resources/assets/treasure2/models/block/gravestone1_cobblestone.json diff --git a/src/resources/assets/treasure2/models/block/gravestone1_mossy_cobblestone.json b/src/main/resources/assets/treasure2/models/block/gravestone1_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone1_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/models/block/gravestone1_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/models/block/gravestone1_obsidian.json b/src/main/resources/assets/treasure2/models/block/gravestone1_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone1_obsidian.json rename to src/main/resources/assets/treasure2/models/block/gravestone1_obsidian.json diff --git a/src/resources/assets/treasure2/models/block/gravestone1_polished_andesite.json b/src/main/resources/assets/treasure2/models/block/gravestone1_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone1_polished_andesite.json rename to src/main/resources/assets/treasure2/models/block/gravestone1_polished_andesite.json diff --git a/src/resources/assets/treasure2/models/block/gravestone1_polished_diorite.json b/src/main/resources/assets/treasure2/models/block/gravestone1_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone1_polished_diorite.json rename to src/main/resources/assets/treasure2/models/block/gravestone1_polished_diorite.json diff --git a/src/resources/assets/treasure2/models/block/gravestone1_polished_granite.json b/src/main/resources/assets/treasure2/models/block/gravestone1_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone1_polished_granite.json rename to src/main/resources/assets/treasure2/models/block/gravestone1_polished_granite.json diff --git a/src/resources/assets/treasure2/models/block/gravestone1_stone.json b/src/main/resources/assets/treasure2/models/block/gravestone1_stone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone1_stone.json rename to src/main/resources/assets/treasure2/models/block/gravestone1_stone.json diff --git a/src/resources/assets/treasure2/models/block/gravestone2.json b/src/main/resources/assets/treasure2/models/block/gravestone2.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone2.json rename to src/main/resources/assets/treasure2/models/block/gravestone2.json diff --git a/src/resources/assets/treasure2/models/block/gravestone2_cobblestone.json b/src/main/resources/assets/treasure2/models/block/gravestone2_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone2_cobblestone.json rename to src/main/resources/assets/treasure2/models/block/gravestone2_cobblestone.json diff --git a/src/resources/assets/treasure2/models/block/gravestone2_mossy_cobblestone.json b/src/main/resources/assets/treasure2/models/block/gravestone2_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone2_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/models/block/gravestone2_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/models/block/gravestone2_obsidian.json b/src/main/resources/assets/treasure2/models/block/gravestone2_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone2_obsidian.json rename to src/main/resources/assets/treasure2/models/block/gravestone2_obsidian.json diff --git a/src/resources/assets/treasure2/models/block/gravestone2_polished_andesite.json b/src/main/resources/assets/treasure2/models/block/gravestone2_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone2_polished_andesite.json rename to src/main/resources/assets/treasure2/models/block/gravestone2_polished_andesite.json diff --git a/src/resources/assets/treasure2/models/block/gravestone2_polished_diorite.json b/src/main/resources/assets/treasure2/models/block/gravestone2_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone2_polished_diorite.json rename to src/main/resources/assets/treasure2/models/block/gravestone2_polished_diorite.json diff --git a/src/resources/assets/treasure2/models/block/gravestone2_polished_granite.json b/src/main/resources/assets/treasure2/models/block/gravestone2_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone2_polished_granite.json rename to src/main/resources/assets/treasure2/models/block/gravestone2_polished_granite.json diff --git a/src/resources/assets/treasure2/models/block/gravestone2_stone.json b/src/main/resources/assets/treasure2/models/block/gravestone2_stone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone2_stone.json rename to src/main/resources/assets/treasure2/models/block/gravestone2_stone.json diff --git a/src/resources/assets/treasure2/models/block/gravestone3.json b/src/main/resources/assets/treasure2/models/block/gravestone3.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone3.json rename to src/main/resources/assets/treasure2/models/block/gravestone3.json diff --git a/src/resources/assets/treasure2/models/block/gravestone3_cobblestone.json b/src/main/resources/assets/treasure2/models/block/gravestone3_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone3_cobblestone.json rename to src/main/resources/assets/treasure2/models/block/gravestone3_cobblestone.json diff --git a/src/resources/assets/treasure2/models/block/gravestone3_mossy_cobblestone.json b/src/main/resources/assets/treasure2/models/block/gravestone3_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone3_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/models/block/gravestone3_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/models/block/gravestone3_obsidian.json b/src/main/resources/assets/treasure2/models/block/gravestone3_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone3_obsidian.json rename to src/main/resources/assets/treasure2/models/block/gravestone3_obsidian.json diff --git a/src/resources/assets/treasure2/models/block/gravestone3_polished_andesite.json b/src/main/resources/assets/treasure2/models/block/gravestone3_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone3_polished_andesite.json rename to src/main/resources/assets/treasure2/models/block/gravestone3_polished_andesite.json diff --git a/src/resources/assets/treasure2/models/block/gravestone3_polished_diorite.json b/src/main/resources/assets/treasure2/models/block/gravestone3_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone3_polished_diorite.json rename to src/main/resources/assets/treasure2/models/block/gravestone3_polished_diorite.json diff --git a/src/resources/assets/treasure2/models/block/gravestone3_polished_granite.json b/src/main/resources/assets/treasure2/models/block/gravestone3_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone3_polished_granite.json rename to src/main/resources/assets/treasure2/models/block/gravestone3_polished_granite.json diff --git a/src/resources/assets/treasure2/models/block/gravestone3_stone.json b/src/main/resources/assets/treasure2/models/block/gravestone3_stone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/gravestone3_stone.json rename to src/main/resources/assets/treasure2/models/block/gravestone3_stone.json diff --git a/src/resources/assets/treasure2/models/block/high_fog.json b/src/main/resources/assets/treasure2/models/block/high_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/high_fog.json rename to src/main/resources/assets/treasure2/models/block/high_fog.json diff --git a/src/resources/assets/treasure2/models/block/high_poison_fog.json b/src/main/resources/assets/treasure2/models/block/high_poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/high_poison_fog.json rename to src/main/resources/assets/treasure2/models/block/high_poison_fog.json diff --git a/src/resources/assets/treasure2/models/block/high_wither_fog.json b/src/main/resources/assets/treasure2/models/block/high_wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/high_wither_fog.json rename to src/main/resources/assets/treasure2/models/block/high_wither_fog.json diff --git a/src/resources/assets/treasure2/models/block/iron_strongbox.json b/src/main/resources/assets/treasure2/models/block/iron_strongbox.json similarity index 100% rename from src/resources/assets/treasure2/models/block/iron_strongbox.json rename to src/main/resources/assets/treasure2/models/block/iron_strongbox.json diff --git a/src/resources/assets/treasure2/models/block/ironbound_chest.json b/src/main/resources/assets/treasure2/models/block/ironbound_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/ironbound_chest.json rename to src/main/resources/assets/treasure2/models/block/ironbound_chest.json diff --git a/src/resources/assets/treasure2/models/block/low_fog.json b/src/main/resources/assets/treasure2/models/block/low_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/low_fog.json rename to src/main/resources/assets/treasure2/models/block/low_fog.json diff --git a/src/resources/assets/treasure2/models/block/low_poison_fog.json b/src/main/resources/assets/treasure2/models/block/low_poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/low_poison_fog.json rename to src/main/resources/assets/treasure2/models/block/low_poison_fog.json diff --git a/src/resources/assets/treasure2/models/block/low_wither_fog.json b/src/main/resources/assets/treasure2/models/block/low_wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/low_wither_fog.json rename to src/main/resources/assets/treasure2/models/block/low_wither_fog.json diff --git a/src/resources/assets/treasure2/models/block/med_fog.json b/src/main/resources/assets/treasure2/models/block/med_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/med_fog.json rename to src/main/resources/assets/treasure2/models/block/med_fog.json diff --git a/src/resources/assets/treasure2/models/block/med_poison_fog.json b/src/main/resources/assets/treasure2/models/block/med_poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/med_poison_fog.json rename to src/main/resources/assets/treasure2/models/block/med_poison_fog.json diff --git a/src/resources/assets/treasure2/models/block/med_wither_fog.json b/src/main/resources/assets/treasure2/models/block/med_wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/med_wither_fog.json rename to src/main/resources/assets/treasure2/models/block/med_wither_fog.json diff --git a/src/resources/assets/treasure2/models/block/ore_parent.json b/src/main/resources/assets/treasure2/models/block/ore_parent.json similarity index 100% rename from src/resources/assets/treasure2/models/block/ore_parent.json rename to src/main/resources/assets/treasure2/models/block/ore_parent.json diff --git a/src/resources/assets/treasure2/models/block/oyster_chest.json b/src/main/resources/assets/treasure2/models/block/oyster_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/oyster_chest.json rename to src/main/resources/assets/treasure2/models/block/oyster_chest.json diff --git a/src/resources/assets/treasure2/models/block/painting.json b/src/main/resources/assets/treasure2/models/block/painting.json similarity index 100% rename from src/resources/assets/treasure2/models/block/painting.json rename to src/main/resources/assets/treasure2/models/block/painting.json diff --git a/src/resources/assets/treasure2/models/block/painting_blocks_bricks.json b/src/main/resources/assets/treasure2/models/block/painting_blocks_bricks.json similarity index 100% rename from src/resources/assets/treasure2/models/block/painting_blocks_bricks.json rename to src/main/resources/assets/treasure2/models/block/painting_blocks_bricks.json diff --git a/src/resources/assets/treasure2/models/block/painting_blocks_cobblestone.json b/src/main/resources/assets/treasure2/models/block/painting_blocks_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/block/painting_blocks_cobblestone.json rename to src/main/resources/assets/treasure2/models/block/painting_blocks_cobblestone.json diff --git a/src/resources/assets/treasure2/models/block/painting_blocks_dirt.json b/src/main/resources/assets/treasure2/models/block/painting_blocks_dirt.json similarity index 100% rename from src/resources/assets/treasure2/models/block/painting_blocks_dirt.json rename to src/main/resources/assets/treasure2/models/block/painting_blocks_dirt.json diff --git a/src/resources/assets/treasure2/models/block/painting_blocks_lava.json b/src/main/resources/assets/treasure2/models/block/painting_blocks_lava.json similarity index 100% rename from src/resources/assets/treasure2/models/block/painting_blocks_lava.json rename to src/main/resources/assets/treasure2/models/block/painting_blocks_lava.json diff --git a/src/resources/assets/treasure2/models/block/painting_blocks_sand.json b/src/main/resources/assets/treasure2/models/block/painting_blocks_sand.json similarity index 100% rename from src/resources/assets/treasure2/models/block/painting_blocks_sand.json rename to src/main/resources/assets/treasure2/models/block/painting_blocks_sand.json diff --git a/src/resources/assets/treasure2/models/block/painting_blocks_water.json b/src/main/resources/assets/treasure2/models/block/painting_blocks_water.json similarity index 100% rename from src/resources/assets/treasure2/models/block/painting_blocks_water.json rename to src/main/resources/assets/treasure2/models/block/painting_blocks_water.json diff --git a/src/resources/assets/treasure2/models/block/painting_blocks_wood.json b/src/main/resources/assets/treasure2/models/block/painting_blocks_wood.json similarity index 100% rename from src/resources/assets/treasure2/models/block/painting_blocks_wood.json rename to src/main/resources/assets/treasure2/models/block/painting_blocks_wood.json diff --git a/src/resources/assets/treasure2/models/block/pirate_chest.json b/src/main/resources/assets/treasure2/models/block/pirate_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/pirate_chest.json rename to src/main/resources/assets/treasure2/models/block/pirate_chest.json diff --git a/src/resources/assets/treasure2/models/block/poison_fog.json b/src/main/resources/assets/treasure2/models/block/poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/poison_fog.json rename to src/main/resources/assets/treasure2/models/block/poison_fog.json diff --git a/src/resources/assets/treasure2/models/block/proximity_spawner.json b/src/main/resources/assets/treasure2/models/block/proximity_spawner.json similarity index 100% rename from src/resources/assets/treasure2/models/block/proximity_spawner.json rename to src/main/resources/assets/treasure2/models/block/proximity_spawner.json diff --git a/src/resources/assets/treasure2/models/block/ruby_ore.json b/src/main/resources/assets/treasure2/models/block/ruby_ore.json similarity index 100% rename from src/resources/assets/treasure2/models/block/ruby_ore.json rename to src/main/resources/assets/treasure2/models/block/ruby_ore.json diff --git a/src/resources/assets/treasure2/models/block/safe.json b/src/main/resources/assets/treasure2/models/block/safe.json similarity index 100% rename from src/resources/assets/treasure2/models/block/safe.json rename to src/main/resources/assets/treasure2/models/block/safe.json diff --git a/src/resources/assets/treasure2/models/block/sapphire_ore.json b/src/main/resources/assets/treasure2/models/block/sapphire_ore.json similarity index 100% rename from src/resources/assets/treasure2/models/block/sapphire_ore.json rename to src/main/resources/assets/treasure2/models/block/sapphire_ore.json diff --git a/src/resources/assets/treasure2/models/block/skeleton_bottom.json b/src/main/resources/assets/treasure2/models/block/skeleton_bottom.json similarity index 100% rename from src/resources/assets/treasure2/models/block/skeleton_bottom.json rename to src/main/resources/assets/treasure2/models/block/skeleton_bottom.json diff --git a/src/resources/assets/treasure2/models/block/skeleton_top.json b/src/main/resources/assets/treasure2/models/block/skeleton_top.json similarity index 100% rename from src/resources/assets/treasure2/models/block/skeleton_top.json rename to src/main/resources/assets/treasure2/models/block/skeleton_top.json diff --git a/src/resources/assets/treasure2/models/block/skull_and_crossbones.json b/src/main/resources/assets/treasure2/models/block/skull_and_crossbones.json similarity index 100% rename from src/resources/assets/treasure2/models/block/skull_and_crossbones.json rename to src/main/resources/assets/treasure2/models/block/skull_and_crossbones.json diff --git a/src/resources/assets/treasure2/models/block/skull_chest.json b/src/main/resources/assets/treasure2/models/block/skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/skull_chest.json rename to src/main/resources/assets/treasure2/models/block/skull_chest.json diff --git a/src/resources/assets/treasure2/models/block/spanish_moss.json b/src/main/resources/assets/treasure2/models/block/spanish_moss.json similarity index 100% rename from src/resources/assets/treasure2/models/block/spanish_moss.json rename to src/main/resources/assets/treasure2/models/block/spanish_moss.json diff --git a/src/resources/assets/treasure2/models/block/spider_chest.json b/src/main/resources/assets/treasure2/models/block/spider_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/spider_chest.json rename to src/main/resources/assets/treasure2/models/block/spider_chest.json diff --git a/src/resources/assets/treasure2/models/block/standard_chest.json b/src/main/resources/assets/treasure2/models/block/standard_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/standard_chest.json rename to src/main/resources/assets/treasure2/models/block/standard_chest.json diff --git a/src/resources/assets/treasure2/models/block/strongbox.json b/src/main/resources/assets/treasure2/models/block/strongbox.json similarity index 100% rename from src/resources/assets/treasure2/models/block/strongbox.json rename to src/main/resources/assets/treasure2/models/block/strongbox.json diff --git a/src/resources/assets/treasure2/models/block/viking_chest.json b/src/main/resources/assets/treasure2/models/block/viking_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/viking_chest.json rename to src/main/resources/assets/treasure2/models/block/viking_chest.json diff --git a/src/resources/assets/treasure2/models/block/whale_bone_pirate_chest.json b/src/main/resources/assets/treasure2/models/block/whale_bone_pirate_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/whale_bone_pirate_chest.json rename to src/main/resources/assets/treasure2/models/block/whale_bone_pirate_chest.json diff --git a/src/resources/assets/treasure2/models/block/wishing_well_block.json b/src/main/resources/assets/treasure2/models/block/wishing_well_block.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wishing_well_block.json rename to src/main/resources/assets/treasure2/models/block/wishing_well_block.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch1.json b/src/main/resources/assets/treasure2/models/block/wither_branch1.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch1.json rename to src/main/resources/assets/treasure2/models/block/wither_branch1.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch1a.json b/src/main/resources/assets/treasure2/models/block/wither_branch1a.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch1a.json rename to src/main/resources/assets/treasure2/models/block/wither_branch1a.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch1b.json b/src/main/resources/assets/treasure2/models/block/wither_branch1b.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch1b.json rename to src/main/resources/assets/treasure2/models/block/wither_branch1b.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch2.json b/src/main/resources/assets/treasure2/models/block/wither_branch2.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch2.json rename to src/main/resources/assets/treasure2/models/block/wither_branch2.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch2_OLD.json b/src/main/resources/assets/treasure2/models/block/wither_branch2_OLD.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch2_OLD.json rename to src/main/resources/assets/treasure2/models/block/wither_branch2_OLD.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch2a.json b/src/main/resources/assets/treasure2/models/block/wither_branch2a.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch2a.json rename to src/main/resources/assets/treasure2/models/block/wither_branch2a.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch2b.json b/src/main/resources/assets/treasure2/models/block/wither_branch2b.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch2b.json rename to src/main/resources/assets/treasure2/models/block/wither_branch2b.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch3.json b/src/main/resources/assets/treasure2/models/block/wither_branch3.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch3.json rename to src/main/resources/assets/treasure2/models/block/wither_branch3.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch3_OLD.json b/src/main/resources/assets/treasure2/models/block/wither_branch3_OLD.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch3_OLD.json rename to src/main/resources/assets/treasure2/models/block/wither_branch3_OLD.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch3a.json b/src/main/resources/assets/treasure2/models/block/wither_branch3a.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch3a.json rename to src/main/resources/assets/treasure2/models/block/wither_branch3a.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch3b.json b/src/main/resources/assets/treasure2/models/block/wither_branch3b.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch3b.json rename to src/main/resources/assets/treasure2/models/block/wither_branch3b.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch5.json b/src/main/resources/assets/treasure2/models/block/wither_branch5.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch5.json rename to src/main/resources/assets/treasure2/models/block/wither_branch5.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch5_OLD.json b/src/main/resources/assets/treasure2/models/block/wither_branch5_OLD.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch5_OLD.json rename to src/main/resources/assets/treasure2/models/block/wither_branch5_OLD.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch5a.json b/src/main/resources/assets/treasure2/models/block/wither_branch5a.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch5a.json rename to src/main/resources/assets/treasure2/models/block/wither_branch5a.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch5b.json b/src/main/resources/assets/treasure2/models/block/wither_branch5b.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch5b.json rename to src/main/resources/assets/treasure2/models/block/wither_branch5b.json diff --git a/src/resources/assets/treasure2/models/block/wither_branch_OLD.json b/src/main/resources/assets/treasure2/models/block/wither_branch_OLD.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_branch_OLD.json rename to src/main/resources/assets/treasure2/models/block/wither_branch_OLD.json diff --git a/src/resources/assets/treasure2/models/block/wither_broken_log.json b/src/main/resources/assets/treasure2/models/block/wither_broken_log.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_broken_log.json rename to src/main/resources/assets/treasure2/models/block/wither_broken_log.json diff --git a/src/resources/assets/treasure2/models/block/wither_broken_log_mossy.json b/src/main/resources/assets/treasure2/models/block/wither_broken_log_mossy.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_broken_log_mossy.json rename to src/main/resources/assets/treasure2/models/block/wither_broken_log_mossy.json diff --git a/src/resources/assets/treasure2/models/block/wither_broken_log_normal.json b/src/main/resources/assets/treasure2/models/block/wither_broken_log_normal.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_broken_log_normal.json rename to src/main/resources/assets/treasure2/models/block/wither_broken_log_normal.json diff --git a/src/resources/assets/treasure2/models/block/wither_chest.json b/src/main/resources/assets/treasure2/models/block/wither_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_chest.json rename to src/main/resources/assets/treasure2/models/block/wither_chest.json diff --git a/src/resources/assets/treasure2/models/block/wither_chest_top.json b/src/main/resources/assets/treasure2/models/block/wither_chest_top.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_chest_top.json rename to src/main/resources/assets/treasure2/models/block/wither_chest_top.json diff --git a/src/resources/assets/treasure2/models/block/wither_fog.json b/src/main/resources/assets/treasure2/models/block/wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_fog.json rename to src/main/resources/assets/treasure2/models/block/wither_fog.json diff --git a/src/resources/assets/treasure2/models/block/wither_log.json b/src/main/resources/assets/treasure2/models/block/wither_log.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_log.json rename to src/main/resources/assets/treasure2/models/block/wither_log.json diff --git a/src/resources/assets/treasure2/models/block/wither_log_full.json b/src/main/resources/assets/treasure2/models/block/wither_log_full.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_log_full.json rename to src/main/resources/assets/treasure2/models/block/wither_log_full.json diff --git a/src/resources/assets/treasure2/models/block/wither_log_full_OLD.json b/src/main/resources/assets/treasure2/models/block/wither_log_full_OLD.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_log_full_OLD.json rename to src/main/resources/assets/treasure2/models/block/wither_log_full_OLD.json diff --git a/src/resources/assets/treasure2/models/block/wither_log_full_mossy.json b/src/main/resources/assets/treasure2/models/block/wither_log_full_mossy.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_log_full_mossy.json rename to src/main/resources/assets/treasure2/models/block/wither_log_full_mossy.json diff --git a/src/resources/assets/treasure2/models/block/wither_log_normal.json b/src/main/resources/assets/treasure2/models/block/wither_log_normal.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_log_normal.json rename to src/main/resources/assets/treasure2/models/block/wither_log_normal.json diff --git a/src/resources/assets/treasure2/models/block/wither_log_normal_OLD.json b/src/main/resources/assets/treasure2/models/block/wither_log_normal_OLD.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_log_normal_OLD.json rename to src/main/resources/assets/treasure2/models/block/wither_log_normal_OLD.json diff --git a/src/resources/assets/treasure2/models/block/wither_log_normal_mossy.json b/src/main/resources/assets/treasure2/models/block/wither_log_normal_mossy.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_log_normal_mossy.json rename to src/main/resources/assets/treasure2/models/block/wither_log_normal_mossy.json diff --git a/src/resources/assets/treasure2/models/block/wither_log_soul.json b/src/main/resources/assets/treasure2/models/block/wither_log_soul.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_log_soul.json rename to src/main/resources/assets/treasure2/models/block/wither_log_soul.json diff --git a/src/resources/assets/treasure2/models/block/wither_log_stripped.json b/src/main/resources/assets/treasure2/models/block/wither_log_stripped.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_log_stripped.json rename to src/main/resources/assets/treasure2/models/block/wither_log_stripped.json diff --git a/src/resources/assets/treasure2/models/block/wither_planks.json b/src/main/resources/assets/treasure2/models/block/wither_planks.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_planks.json rename to src/main/resources/assets/treasure2/models/block/wither_planks.json diff --git a/src/resources/assets/treasure2/models/block/wither_root1.json b/src/main/resources/assets/treasure2/models/block/wither_root1.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_root1.json rename to src/main/resources/assets/treasure2/models/block/wither_root1.json diff --git a/src/resources/assets/treasure2/models/block/wither_root1a.json b/src/main/resources/assets/treasure2/models/block/wither_root1a.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_root1a.json rename to src/main/resources/assets/treasure2/models/block/wither_root1a.json diff --git a/src/resources/assets/treasure2/models/block/wither_root1b.json b/src/main/resources/assets/treasure2/models/block/wither_root1b.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_root1b.json rename to src/main/resources/assets/treasure2/models/block/wither_root1b.json diff --git a/src/resources/assets/treasure2/models/block/wither_root2.json b/src/main/resources/assets/treasure2/models/block/wither_root2.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_root2.json rename to src/main/resources/assets/treasure2/models/block/wither_root2.json diff --git a/src/resources/assets/treasure2/models/block/wither_root2a.json b/src/main/resources/assets/treasure2/models/block/wither_root2a.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_root2a.json rename to src/main/resources/assets/treasure2/models/block/wither_root2a.json diff --git a/src/resources/assets/treasure2/models/block/wither_root2b.json b/src/main/resources/assets/treasure2/models/block/wither_root2b.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wither_root2b.json rename to src/main/resources/assets/treasure2/models/block/wither_root2b.json diff --git a/src/resources/assets/treasure2/models/block/wood_chest.json b/src/main/resources/assets/treasure2/models/block/wood_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/block/wood_chest.json rename to src/main/resources/assets/treasure2/models/block/wood_chest.json diff --git a/src/resources/assets/treasure2/models/item/adephagias_bounty.json b/src/main/resources/assets/treasure2/models/item/adephagias_bounty.json similarity index 100% rename from src/resources/assets/treasure2/models/item/adephagias_bounty.json rename to src/main/resources/assets/treasure2/models/item/adephagias_bounty.json diff --git a/src/resources/assets/treasure2/models/item/angel_blessed.json b/src/main/resources/assets/treasure2/models/item/angel_blessed.json similarity index 100% rename from src/resources/assets/treasure2/models/item/angel_blessed.json rename to src/main/resources/assets/treasure2/models/item/angel_blessed.json diff --git a/src/resources/assets/treasure2/models/item/apprentices_pouch.json b/src/main/resources/assets/treasure2/models/item/apprentices_pouch.json similarity index 100% rename from src/resources/assets/treasure2/models/item/apprentices_pouch.json rename to src/main/resources/assets/treasure2/models/item/apprentices_pouch.json diff --git a/src/resources/assets/treasure2/models/item/black_pearl.json b/src/main/resources/assets/treasure2/models/item/black_pearl.json similarity index 100% rename from src/resources/assets/treasure2/models/item/black_pearl.json rename to src/main/resources/assets/treasure2/models/item/black_pearl.json diff --git a/src/resources/assets/treasure2/models/item/blackstone.json b/src/main/resources/assets/treasure2/models/item/blackstone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/blackstone.json rename to src/main/resources/assets/treasure2/models/item/blackstone.json diff --git a/src/resources/assets/treasure2/models/item/cauldron_chest.json b/src/main/resources/assets/treasure2/models/item/cauldron_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/cauldron_chest.json rename to src/main/resources/assets/treasure2/models/item/cauldron_chest.json diff --git a/src/resources/assets/treasure2/models/item/charmed_gold_coin.json b/src/main/resources/assets/treasure2/models/item/charmed_gold_coin.json similarity index 100% rename from src/resources/assets/treasure2/models/item/charmed_gold_coin.json rename to src/main/resources/assets/treasure2/models/item/charmed_gold_coin.json diff --git a/src/resources/assets/treasure2/models/item/charmed_ruby.json b/src/main/resources/assets/treasure2/models/item/charmed_ruby.json similarity index 100% rename from src/resources/assets/treasure2/models/item/charmed_ruby.json rename to src/main/resources/assets/treasure2/models/item/charmed_ruby.json diff --git a/src/resources/assets/treasure2/models/item/charmed_silver_coin.json b/src/main/resources/assets/treasure2/models/item/charmed_silver_coin.json similarity index 100% rename from src/resources/assets/treasure2/models/item/charmed_silver_coin.json rename to src/main/resources/assets/treasure2/models/item/charmed_silver_coin.json diff --git a/src/resources/assets/treasure2/models/item/compressor_chest.json b/src/main/resources/assets/treasure2/models/item/compressor_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/compressor_chest.json rename to src/main/resources/assets/treasure2/models/item/compressor_chest.json diff --git a/src/resources/assets/treasure2/models/item/crate_chest.json b/src/main/resources/assets/treasure2/models/item/crate_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/crate_chest.json rename to src/main/resources/assets/treasure2/models/item/crate_chest.json diff --git a/src/resources/assets/treasure2/models/item/crate_chest_moldy.json b/src/main/resources/assets/treasure2/models/item/crate_chest_moldy.json similarity index 100% rename from src/resources/assets/treasure2/models/item/crate_chest_moldy.json rename to src/main/resources/assets/treasure2/models/item/crate_chest_moldy.json diff --git a/src/resources/assets/treasure2/models/item/desert_wishing_well_block.json b/src/main/resources/assets/treasure2/models/item/desert_wishing_well_block.json similarity index 100% rename from src/resources/assets/treasure2/models/item/desert_wishing_well_block.json rename to src/main/resources/assets/treasure2/models/item/desert_wishing_well_block.json diff --git a/src/resources/assets/treasure2/models/item/diamond_key.json b/src/main/resources/assets/treasure2/models/item/diamond_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/diamond_key.json rename to src/main/resources/assets/treasure2/models/item/diamond_key.json diff --git a/src/resources/assets/treasure2/models/item/diamond_lock.json b/src/main/resources/assets/treasure2/models/item/diamond_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/diamond_lock.json rename to src/main/resources/assets/treasure2/models/item/diamond_lock.json diff --git a/src/resources/assets/treasure2/models/item/dread_pirate_chest.json b/src/main/resources/assets/treasure2/models/item/dread_pirate_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/dread_pirate_chest.json rename to src/main/resources/assets/treasure2/models/item/dread_pirate_chest.json diff --git a/src/resources/assets/treasure2/models/item/dwarven_talisman.json b/src/main/resources/assets/treasure2/models/item/dwarven_talisman.json similarity index 100% rename from src/resources/assets/treasure2/models/item/dwarven_talisman.json rename to src/main/resources/assets/treasure2/models/item/dwarven_talisman.json diff --git a/src/resources/assets/treasure2/models/item/ember_key.json b/src/main/resources/assets/treasure2/models/item/ember_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/ember_key.json rename to src/main/resources/assets/treasure2/models/item/ember_key.json diff --git a/src/resources/assets/treasure2/models/item/ember_lock.json b/src/main/resources/assets/treasure2/models/item/ember_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/ember_lock.json rename to src/main/resources/assets/treasure2/models/item/ember_lock.json diff --git a/src/resources/assets/treasure2/models/item/emerald_key.json b/src/main/resources/assets/treasure2/models/item/emerald_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/emerald_key.json rename to src/main/resources/assets/treasure2/models/item/emerald_key.json diff --git a/src/resources/assets/treasure2/models/item/emerald_lock.json b/src/main/resources/assets/treasure2/models/item/emerald_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/emerald_lock.json rename to src/main/resources/assets/treasure2/models/item/emerald_lock.json diff --git a/src/resources/assets/treasure2/models/item/eye_patch.json b/src/main/resources/assets/treasure2/models/item/eye_patch.json similarity index 100% rename from src/resources/assets/treasure2/models/item/eye_patch.json rename to src/main/resources/assets/treasure2/models/item/eye_patch.json diff --git a/src/resources/assets/treasure2/models/item/falling_grass.json b/src/main/resources/assets/treasure2/models/item/falling_grass.json similarity index 100% rename from src/resources/assets/treasure2/models/item/falling_grass.json rename to src/main/resources/assets/treasure2/models/item/falling_grass.json diff --git a/src/resources/assets/treasure2/models/item/falling_red_sand.json b/src/main/resources/assets/treasure2/models/item/falling_red_sand.json similarity index 100% rename from src/resources/assets/treasure2/models/item/falling_red_sand.json rename to src/main/resources/assets/treasure2/models/item/falling_red_sand.json diff --git a/src/resources/assets/treasure2/models/item/falling_sand.json b/src/main/resources/assets/treasure2/models/item/falling_sand.json similarity index 100% rename from src/resources/assets/treasure2/models/item/falling_sand.json rename to src/main/resources/assets/treasure2/models/item/falling_sand.json diff --git a/src/resources/assets/treasure2/models/item/fog.json b/src/main/resources/assets/treasure2/models/item/fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/fog.json rename to src/main/resources/assets/treasure2/models/item/fog.json diff --git a/src/resources/assets/treasure2/models/item/fools_coin.json b/src/main/resources/assets/treasure2/models/item/fools_coin.json similarity index 100% rename from src/resources/assets/treasure2/models/item/fools_coin.json rename to src/main/resources/assets/treasure2/models/item/fools_coin.json diff --git a/src/resources/assets/treasure2/models/item/gold_coin.json b/src/main/resources/assets/treasure2/models/item/gold_coin.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gold_coin.json rename to src/main/resources/assets/treasure2/models/item/gold_coin.json diff --git a/src/resources/assets/treasure2/models/item/gold_key.json b/src/main/resources/assets/treasure2/models/item/gold_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gold_key.json rename to src/main/resources/assets/treasure2/models/item/gold_key.json diff --git a/src/resources/assets/treasure2/models/item/gold_lock.json b/src/main/resources/assets/treasure2/models/item/gold_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gold_lock.json rename to src/main/resources/assets/treasure2/models/item/gold_lock.json diff --git a/src/resources/assets/treasure2/models/item/gold_skull_chest.json b/src/main/resources/assets/treasure2/models/item/gold_skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gold_skull_chest.json rename to src/main/resources/assets/treasure2/models/item/gold_skull_chest.json diff --git a/src/resources/assets/treasure2/models/item/gold_strongbox.json b/src/main/resources/assets/treasure2/models/item/gold_strongbox.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gold_strongbox.json rename to src/main/resources/assets/treasure2/models/item/gold_strongbox.json diff --git a/src/resources/assets/treasure2/models/item/gravestone1_cobblestone.json b/src/main/resources/assets/treasure2/models/item/gravestone1_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone1_cobblestone.json rename to src/main/resources/assets/treasure2/models/item/gravestone1_cobblestone.json diff --git a/src/resources/assets/treasure2/models/item/gravestone1_mossy_cobblestone.json b/src/main/resources/assets/treasure2/models/item/gravestone1_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone1_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/models/item/gravestone1_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/models/item/gravestone1_obsidian.json b/src/main/resources/assets/treasure2/models/item/gravestone1_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone1_obsidian.json rename to src/main/resources/assets/treasure2/models/item/gravestone1_obsidian.json diff --git a/src/resources/assets/treasure2/models/item/gravestone1_polished_andesite.json b/src/main/resources/assets/treasure2/models/item/gravestone1_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone1_polished_andesite.json rename to src/main/resources/assets/treasure2/models/item/gravestone1_polished_andesite.json diff --git a/src/resources/assets/treasure2/models/item/gravestone1_polished_diorite.json b/src/main/resources/assets/treasure2/models/item/gravestone1_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone1_polished_diorite.json rename to src/main/resources/assets/treasure2/models/item/gravestone1_polished_diorite.json diff --git a/src/resources/assets/treasure2/models/item/gravestone1_polished_granite.json b/src/main/resources/assets/treasure2/models/item/gravestone1_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone1_polished_granite.json rename to src/main/resources/assets/treasure2/models/item/gravestone1_polished_granite.json diff --git a/src/resources/assets/treasure2/models/item/gravestone1_spawner_stone.json b/src/main/resources/assets/treasure2/models/item/gravestone1_spawner_stone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone1_spawner_stone.json rename to src/main/resources/assets/treasure2/models/item/gravestone1_spawner_stone.json diff --git a/src/resources/assets/treasure2/models/item/gravestone1_stone.json b/src/main/resources/assets/treasure2/models/item/gravestone1_stone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone1_stone.json rename to src/main/resources/assets/treasure2/models/item/gravestone1_stone.json diff --git a/src/resources/assets/treasure2/models/item/gravestone2_cobblestone.json b/src/main/resources/assets/treasure2/models/item/gravestone2_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone2_cobblestone.json rename to src/main/resources/assets/treasure2/models/item/gravestone2_cobblestone.json diff --git a/src/resources/assets/treasure2/models/item/gravestone2_mossy_cobblestone.json b/src/main/resources/assets/treasure2/models/item/gravestone2_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone2_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/models/item/gravestone2_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/models/item/gravestone2_obsidian.json b/src/main/resources/assets/treasure2/models/item/gravestone2_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone2_obsidian.json rename to src/main/resources/assets/treasure2/models/item/gravestone2_obsidian.json diff --git a/src/resources/assets/treasure2/models/item/gravestone2_polished_andesite.json b/src/main/resources/assets/treasure2/models/item/gravestone2_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone2_polished_andesite.json rename to src/main/resources/assets/treasure2/models/item/gravestone2_polished_andesite.json diff --git a/src/resources/assets/treasure2/models/item/gravestone2_polished_diorite.json b/src/main/resources/assets/treasure2/models/item/gravestone2_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone2_polished_diorite.json rename to src/main/resources/assets/treasure2/models/item/gravestone2_polished_diorite.json diff --git a/src/resources/assets/treasure2/models/item/gravestone2_polished_granite.json b/src/main/resources/assets/treasure2/models/item/gravestone2_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone2_polished_granite.json rename to src/main/resources/assets/treasure2/models/item/gravestone2_polished_granite.json diff --git a/src/resources/assets/treasure2/models/item/gravestone2_spawner_cobblestone.json b/src/main/resources/assets/treasure2/models/item/gravestone2_spawner_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone2_spawner_cobblestone.json rename to src/main/resources/assets/treasure2/models/item/gravestone2_spawner_cobblestone.json diff --git a/src/resources/assets/treasure2/models/item/gravestone2_stone.json b/src/main/resources/assets/treasure2/models/item/gravestone2_stone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone2_stone.json rename to src/main/resources/assets/treasure2/models/item/gravestone2_stone.json diff --git a/src/resources/assets/treasure2/models/item/gravestone3_cobblestone.json b/src/main/resources/assets/treasure2/models/item/gravestone3_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone3_cobblestone.json rename to src/main/resources/assets/treasure2/models/item/gravestone3_cobblestone.json diff --git a/src/resources/assets/treasure2/models/item/gravestone3_mossy_cobblestone.json b/src/main/resources/assets/treasure2/models/item/gravestone3_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone3_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/models/item/gravestone3_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/models/item/gravestone3_obsidian.json b/src/main/resources/assets/treasure2/models/item/gravestone3_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone3_obsidian.json rename to src/main/resources/assets/treasure2/models/item/gravestone3_obsidian.json diff --git a/src/resources/assets/treasure2/models/item/gravestone3_polished_andesite.json b/src/main/resources/assets/treasure2/models/item/gravestone3_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone3_polished_andesite.json rename to src/main/resources/assets/treasure2/models/item/gravestone3_polished_andesite.json diff --git a/src/resources/assets/treasure2/models/item/gravestone3_polished_diorite.json b/src/main/resources/assets/treasure2/models/item/gravestone3_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone3_polished_diorite.json rename to src/main/resources/assets/treasure2/models/item/gravestone3_polished_diorite.json diff --git a/src/resources/assets/treasure2/models/item/gravestone3_polished_granite.json b/src/main/resources/assets/treasure2/models/item/gravestone3_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone3_polished_granite.json rename to src/main/resources/assets/treasure2/models/item/gravestone3_polished_granite.json diff --git a/src/resources/assets/treasure2/models/item/gravestone3_spawner_obsidian.json b/src/main/resources/assets/treasure2/models/item/gravestone3_spawner_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone3_spawner_obsidian.json rename to src/main/resources/assets/treasure2/models/item/gravestone3_spawner_obsidian.json diff --git a/src/resources/assets/treasure2/models/item/gravestone3_stone.json b/src/main/resources/assets/treasure2/models/item/gravestone3_stone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/gravestone3_stone.json rename to src/main/resources/assets/treasure2/models/item/gravestone3_stone.json diff --git a/src/resources/assets/treasure2/models/item/high_fog.json b/src/main/resources/assets/treasure2/models/item/high_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/high_fog.json rename to src/main/resources/assets/treasure2/models/item/high_fog.json diff --git a/src/resources/assets/treasure2/models/item/high_poison_fog.json b/src/main/resources/assets/treasure2/models/item/high_poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/high_poison_fog.json rename to src/main/resources/assets/treasure2/models/item/high_poison_fog.json diff --git a/src/resources/assets/treasure2/models/item/high_wither_fog.json b/src/main/resources/assets/treasure2/models/item/high_wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/high_wither_fog.json rename to src/main/resources/assets/treasure2/models/item/high_wither_fog.json diff --git a/src/resources/assets/treasure2/models/item/iron_key.json b/src/main/resources/assets/treasure2/models/item/iron_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/iron_key.json rename to src/main/resources/assets/treasure2/models/item/iron_key.json diff --git a/src/resources/assets/treasure2/models/item/iron_lock.json b/src/main/resources/assets/treasure2/models/item/iron_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/iron_lock.json rename to src/main/resources/assets/treasure2/models/item/iron_lock.json diff --git a/src/resources/assets/treasure2/models/item/iron_strongbox.json b/src/main/resources/assets/treasure2/models/item/iron_strongbox.json similarity index 100% rename from src/resources/assets/treasure2/models/item/iron_strongbox.json rename to src/main/resources/assets/treasure2/models/item/iron_strongbox.json diff --git a/src/resources/assets/treasure2/models/item/ironbound_chest.json b/src/main/resources/assets/treasure2/models/item/ironbound_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/ironbound_chest.json rename to src/main/resources/assets/treasure2/models/item/ironbound_chest.json diff --git a/src/resources/assets/treasure2/models/item/jewelled_key.json b/src/main/resources/assets/treasure2/models/item/jewelled_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/jewelled_key.json rename to src/main/resources/assets/treasure2/models/item/jewelled_key.json diff --git a/src/resources/assets/treasure2/models/item/key_ring.json b/src/main/resources/assets/treasure2/models/item/key_ring.json similarity index 100% rename from src/resources/assets/treasure2/models/item/key_ring.json rename to src/main/resources/assets/treasure2/models/item/key_ring.json diff --git a/src/resources/assets/treasure2/models/item/leaf_key.json b/src/main/resources/assets/treasure2/models/item/leaf_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/leaf_key.json rename to src/main/resources/assets/treasure2/models/item/leaf_key.json diff --git a/src/resources/assets/treasure2/models/item/leaf_lock.json b/src/main/resources/assets/treasure2/models/item/leaf_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/leaf_lock.json rename to src/main/resources/assets/treasure2/models/item/leaf_lock.json diff --git a/src/resources/assets/treasure2/models/item/lightning_key.json b/src/main/resources/assets/treasure2/models/item/lightning_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/lightning_key.json rename to src/main/resources/assets/treasure2/models/item/lightning_key.json diff --git a/src/resources/assets/treasure2/models/item/low_fog.json b/src/main/resources/assets/treasure2/models/item/low_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/low_fog.json rename to src/main/resources/assets/treasure2/models/item/low_fog.json diff --git a/src/resources/assets/treasure2/models/item/low_poison_fog.json b/src/main/resources/assets/treasure2/models/item/low_poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/low_poison_fog.json rename to src/main/resources/assets/treasure2/models/item/low_poison_fog.json diff --git a/src/resources/assets/treasure2/models/item/low_wither_fog.json b/src/main/resources/assets/treasure2/models/item/low_wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/low_wither_fog.json rename to src/main/resources/assets/treasure2/models/item/low_wither_fog.json diff --git a/src/resources/assets/treasure2/models/item/lucky_pouch.json b/src/main/resources/assets/treasure2/models/item/lucky_pouch.json similarity index 100% rename from src/resources/assets/treasure2/models/item/lucky_pouch.json rename to src/main/resources/assets/treasure2/models/item/lucky_pouch.json diff --git a/src/resources/assets/treasure2/models/item/masters_pouch.json b/src/main/resources/assets/treasure2/models/item/masters_pouch.json similarity index 100% rename from src/resources/assets/treasure2/models/item/masters_pouch.json rename to src/main/resources/assets/treasure2/models/item/masters_pouch.json diff --git a/src/resources/assets/treasure2/models/item/med_fog.json b/src/main/resources/assets/treasure2/models/item/med_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/med_fog.json rename to src/main/resources/assets/treasure2/models/item/med_fog.json diff --git a/src/resources/assets/treasure2/models/item/med_poison_fog.json b/src/main/resources/assets/treasure2/models/item/med_poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/med_poison_fog.json rename to src/main/resources/assets/treasure2/models/item/med_poison_fog.json diff --git a/src/resources/assets/treasure2/models/item/med_wither_fog.json b/src/main/resources/assets/treasure2/models/item/med_wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/med_wither_fog.json rename to src/main/resources/assets/treasure2/models/item/med_wither_fog.json diff --git a/src/resources/assets/treasure2/models/item/medics_token.json b/src/main/resources/assets/treasure2/models/item/medics_token.json similarity index 100% rename from src/resources/assets/treasure2/models/item/medics_token.json rename to src/main/resources/assets/treasure2/models/item/medics_token.json diff --git a/src/resources/assets/treasure2/models/item/metallurgists_key.json b/src/main/resources/assets/treasure2/models/item/metallurgists_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/metallurgists_key.json rename to src/main/resources/assets/treasure2/models/item/metallurgists_key.json diff --git a/src/resources/assets/treasure2/models/item/miners_friend.json b/src/main/resources/assets/treasure2/models/item/miners_friend.json similarity index 100% rename from src/resources/assets/treasure2/models/item/miners_friend.json rename to src/main/resources/assets/treasure2/models/item/miners_friend.json diff --git a/src/resources/assets/treasure2/models/item/mirthas_torch.json b/src/main/resources/assets/treasure2/models/item/mirthas_torch.json similarity index 100% rename from src/resources/assets/treasure2/models/item/mirthas_torch.json rename to src/main/resources/assets/treasure2/models/item/mirthas_torch.json diff --git a/src/resources/assets/treasure2/models/item/painting_blocks_bricks.json b/src/main/resources/assets/treasure2/models/item/painting_blocks_bricks.json similarity index 100% rename from src/resources/assets/treasure2/models/item/painting_blocks_bricks.json rename to src/main/resources/assets/treasure2/models/item/painting_blocks_bricks.json diff --git a/src/resources/assets/treasure2/models/item/painting_blocks_cobblestone.json b/src/main/resources/assets/treasure2/models/item/painting_blocks_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/models/item/painting_blocks_cobblestone.json rename to src/main/resources/assets/treasure2/models/item/painting_blocks_cobblestone.json diff --git a/src/resources/assets/treasure2/models/item/painting_blocks_dirt.json b/src/main/resources/assets/treasure2/models/item/painting_blocks_dirt.json similarity index 100% rename from src/resources/assets/treasure2/models/item/painting_blocks_dirt.json rename to src/main/resources/assets/treasure2/models/item/painting_blocks_dirt.json diff --git a/src/resources/assets/treasure2/models/item/painting_blocks_lava.json b/src/main/resources/assets/treasure2/models/item/painting_blocks_lava.json similarity index 100% rename from src/resources/assets/treasure2/models/item/painting_blocks_lava.json rename to src/main/resources/assets/treasure2/models/item/painting_blocks_lava.json diff --git a/src/resources/assets/treasure2/models/item/painting_blocks_sand.json b/src/main/resources/assets/treasure2/models/item/painting_blocks_sand.json similarity index 100% rename from src/resources/assets/treasure2/models/item/painting_blocks_sand.json rename to src/main/resources/assets/treasure2/models/item/painting_blocks_sand.json diff --git a/src/resources/assets/treasure2/models/item/painting_blocks_water.json b/src/main/resources/assets/treasure2/models/item/painting_blocks_water.json similarity index 100% rename from src/resources/assets/treasure2/models/item/painting_blocks_water.json rename to src/main/resources/assets/treasure2/models/item/painting_blocks_water.json diff --git a/src/resources/assets/treasure2/models/item/painting_blocks_wood.json b/src/main/resources/assets/treasure2/models/item/painting_blocks_wood.json similarity index 100% rename from src/resources/assets/treasure2/models/item/painting_blocks_wood.json rename to src/main/resources/assets/treasure2/models/item/painting_blocks_wood.json diff --git a/src/resources/assets/treasure2/models/item/pilferers_lock_pick.json b/src/main/resources/assets/treasure2/models/item/pilferers_lock_pick.json similarity index 100% rename from src/resources/assets/treasure2/models/item/pilferers_lock_pick.json rename to src/main/resources/assets/treasure2/models/item/pilferers_lock_pick.json diff --git a/src/resources/assets/treasure2/models/item/pirate_chest.json b/src/main/resources/assets/treasure2/models/item/pirate_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/pirate_chest.json rename to src/main/resources/assets/treasure2/models/item/pirate_chest.json diff --git a/src/resources/assets/treasure2/models/item/pirate_mimic.json b/src/main/resources/assets/treasure2/models/item/pirate_mimic.json similarity index 100% rename from src/resources/assets/treasure2/models/item/pirate_mimic.json rename to src/main/resources/assets/treasure2/models/item/pirate_mimic.json diff --git a/src/resources/assets/treasure2/models/item/poison_fog.json b/src/main/resources/assets/treasure2/models/item/poison_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/poison_fog.json rename to src/main/resources/assets/treasure2/models/item/poison_fog.json diff --git a/src/resources/assets/treasure2/models/item/pouch.json b/src/main/resources/assets/treasure2/models/item/pouch.json similarity index 100% rename from src/resources/assets/treasure2/models/item/pouch.json rename to src/main/resources/assets/treasure2/models/item/pouch.json diff --git a/src/resources/assets/treasure2/models/item/proximity_spawner.json b/src/main/resources/assets/treasure2/models/item/proximity_spawner.json similarity index 100% rename from src/resources/assets/treasure2/models/item/proximity_spawner.json rename to src/main/resources/assets/treasure2/models/item/proximity_spawner.json diff --git a/src/resources/assets/treasure2/models/item/ruby.json b/src/main/resources/assets/treasure2/models/item/ruby.json similarity index 100% rename from src/resources/assets/treasure2/models/item/ruby.json rename to src/main/resources/assets/treasure2/models/item/ruby.json diff --git a/src/resources/assets/treasure2/models/item/ruby_key.json b/src/main/resources/assets/treasure2/models/item/ruby_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/ruby_key.json rename to src/main/resources/assets/treasure2/models/item/ruby_key.json diff --git a/src/resources/assets/treasure2/models/item/ruby_lock.json b/src/main/resources/assets/treasure2/models/item/ruby_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/ruby_lock.json rename to src/main/resources/assets/treasure2/models/item/ruby_lock.json diff --git a/src/resources/assets/treasure2/models/item/ruby_ore.json b/src/main/resources/assets/treasure2/models/item/ruby_ore.json similarity index 100% rename from src/resources/assets/treasure2/models/item/ruby_ore.json rename to src/main/resources/assets/treasure2/models/item/ruby_ore.json diff --git a/src/resources/assets/treasure2/models/item/safe.json b/src/main/resources/assets/treasure2/models/item/safe.json similarity index 100% rename from src/resources/assets/treasure2/models/item/safe.json rename to src/main/resources/assets/treasure2/models/item/safe.json diff --git a/src/resources/assets/treasure2/models/item/salandaars_ward.json b/src/main/resources/assets/treasure2/models/item/salandaars_ward.json similarity index 100% rename from src/resources/assets/treasure2/models/item/salandaars_ward.json rename to src/main/resources/assets/treasure2/models/item/salandaars_ward.json diff --git a/src/resources/assets/treasure2/models/item/sapphire.json b/src/main/resources/assets/treasure2/models/item/sapphire.json similarity index 100% rename from src/resources/assets/treasure2/models/item/sapphire.json rename to src/main/resources/assets/treasure2/models/item/sapphire.json diff --git a/src/resources/assets/treasure2/models/item/sapphire_key.json b/src/main/resources/assets/treasure2/models/item/sapphire_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/sapphire_key.json rename to src/main/resources/assets/treasure2/models/item/sapphire_key.json diff --git a/src/resources/assets/treasure2/models/item/sapphire_lock.json b/src/main/resources/assets/treasure2/models/item/sapphire_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/sapphire_lock.json rename to src/main/resources/assets/treasure2/models/item/sapphire_lock.json diff --git a/src/resources/assets/treasure2/models/item/sapphire_ore.json b/src/main/resources/assets/treasure2/models/item/sapphire_ore.json similarity index 100% rename from src/resources/assets/treasure2/models/item/sapphire_ore.json rename to src/main/resources/assets/treasure2/models/item/sapphire_ore.json diff --git a/src/resources/assets/treasure2/models/item/silver_coin.json b/src/main/resources/assets/treasure2/models/item/silver_coin.json similarity index 100% rename from src/resources/assets/treasure2/models/item/silver_coin.json rename to src/main/resources/assets/treasure2/models/item/silver_coin.json diff --git a/src/resources/assets/treasure2/models/item/skeleton.json b/src/main/resources/assets/treasure2/models/item/skeleton.json similarity index 100% rename from src/resources/assets/treasure2/models/item/skeleton.json rename to src/main/resources/assets/treasure2/models/item/skeleton.json diff --git a/src/resources/assets/treasure2/models/item/skeleton_key.json b/src/main/resources/assets/treasure2/models/item/skeleton_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/skeleton_key.json rename to src/main/resources/assets/treasure2/models/item/skeleton_key.json diff --git a/src/resources/assets/treasure2/models/item/skull_and_crossbones.json b/src/main/resources/assets/treasure2/models/item/skull_and_crossbones.json similarity index 100% rename from src/resources/assets/treasure2/models/item/skull_and_crossbones.json rename to src/main/resources/assets/treasure2/models/item/skull_and_crossbones.json diff --git a/src/resources/assets/treasure2/models/item/skull_chest.json b/src/main/resources/assets/treasure2/models/item/skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/skull_chest.json rename to src/main/resources/assets/treasure2/models/item/skull_chest.json diff --git a/src/resources/assets/treasure2/models/item/skull_sword.json b/src/main/resources/assets/treasure2/models/item/skull_sword.json similarity index 100% rename from src/resources/assets/treasure2/models/item/skull_sword.json rename to src/main/resources/assets/treasure2/models/item/skull_sword.json diff --git a/src/resources/assets/treasure2/models/item/spanish_moss.json b/src/main/resources/assets/treasure2/models/item/spanish_moss.json similarity index 100% rename from src/resources/assets/treasure2/models/item/spanish_moss.json rename to src/main/resources/assets/treasure2/models/item/spanish_moss.json diff --git a/src/resources/assets/treasure2/models/item/spider_chest.json b/src/main/resources/assets/treasure2/models/item/spider_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/spider_chest.json rename to src/main/resources/assets/treasure2/models/item/spider_chest.json diff --git a/src/resources/assets/treasure2/models/item/spider_key.json b/src/main/resources/assets/treasure2/models/item/spider_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/spider_key.json rename to src/main/resources/assets/treasure2/models/item/spider_key.json diff --git a/src/resources/assets/treasure2/models/item/spider_lock.json b/src/main/resources/assets/treasure2/models/item/spider_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/spider_lock.json rename to src/main/resources/assets/treasure2/models/item/spider_lock.json diff --git a/src/resources/assets/treasure2/models/item/stone_key.json b/src/main/resources/assets/treasure2/models/item/stone_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/stone_key.json rename to src/main/resources/assets/treasure2/models/item/stone_key.json diff --git a/src/resources/assets/treasure2/models/item/stone_lock.json b/src/main/resources/assets/treasure2/models/item/stone_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/stone_lock.json rename to src/main/resources/assets/treasure2/models/item/stone_lock.json diff --git a/src/resources/assets/treasure2/models/item/thiefs_lock_pick.json b/src/main/resources/assets/treasure2/models/item/thiefs_lock_pick.json similarity index 100% rename from src/resources/assets/treasure2/models/item/thiefs_lock_pick.json rename to src/main/resources/assets/treasure2/models/item/thiefs_lock_pick.json diff --git a/src/resources/assets/treasure2/models/item/treasure_tab.json b/src/main/resources/assets/treasure2/models/item/treasure_tab.json similarity index 100% rename from src/resources/assets/treasure2/models/item/treasure_tab.json rename to src/main/resources/assets/treasure2/models/item/treasure_tab.json diff --git a/src/resources/assets/treasure2/models/item/treasure_tool.json b/src/main/resources/assets/treasure2/models/item/treasure_tool.json similarity index 100% rename from src/resources/assets/treasure2/models/item/treasure_tool.json rename to src/main/resources/assets/treasure2/models/item/treasure_tool.json diff --git a/src/resources/assets/treasure2/models/item/viking_chest.json b/src/main/resources/assets/treasure2/models/item/viking_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/viking_chest.json rename to src/main/resources/assets/treasure2/models/item/viking_chest.json diff --git a/src/resources/assets/treasure2/models/item/whale_bone_pirate_chest.json b/src/main/resources/assets/treasure2/models/item/whale_bone_pirate_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/whale_bone_pirate_chest.json rename to src/main/resources/assets/treasure2/models/item/whale_bone_pirate_chest.json diff --git a/src/resources/assets/treasure2/models/item/white_pearl.json b/src/main/resources/assets/treasure2/models/item/white_pearl.json similarity index 100% rename from src/resources/assets/treasure2/models/item/white_pearl.json rename to src/main/resources/assets/treasure2/models/item/white_pearl.json diff --git a/src/resources/assets/treasure2/models/item/wishing_well_block.json b/src/main/resources/assets/treasure2/models/item/wishing_well_block.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wishing_well_block.json rename to src/main/resources/assets/treasure2/models/item/wishing_well_block.json diff --git a/src/resources/assets/treasure2/models/item/wither_broken_log.json b/src/main/resources/assets/treasure2/models/item/wither_broken_log.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_broken_log.json rename to src/main/resources/assets/treasure2/models/item/wither_broken_log.json diff --git a/src/resources/assets/treasure2/models/item/wither_chest.json b/src/main/resources/assets/treasure2/models/item/wither_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_chest.json rename to src/main/resources/assets/treasure2/models/item/wither_chest.json diff --git a/src/resources/assets/treasure2/models/item/wither_chest_top.json b/src/main/resources/assets/treasure2/models/item/wither_chest_top.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_chest_top.json rename to src/main/resources/assets/treasure2/models/item/wither_chest_top.json diff --git a/src/resources/assets/treasure2/models/item/wither_fog.json b/src/main/resources/assets/treasure2/models/item/wither_fog.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_fog.json rename to src/main/resources/assets/treasure2/models/item/wither_fog.json diff --git a/src/resources/assets/treasure2/models/item/wither_key.json b/src/main/resources/assets/treasure2/models/item/wither_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_key.json rename to src/main/resources/assets/treasure2/models/item/wither_key.json diff --git a/src/resources/assets/treasure2/models/item/wither_lock.json b/src/main/resources/assets/treasure2/models/item/wither_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_lock.json rename to src/main/resources/assets/treasure2/models/item/wither_lock.json diff --git a/src/resources/assets/treasure2/models/item/wither_log.json b/src/main/resources/assets/treasure2/models/item/wither_log.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_log.json rename to src/main/resources/assets/treasure2/models/item/wither_log.json diff --git a/src/resources/assets/treasure2/models/item/wither_log_soul.json b/src/main/resources/assets/treasure2/models/item/wither_log_soul.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_log_soul.json rename to src/main/resources/assets/treasure2/models/item/wither_log_soul.json diff --git a/src/resources/assets/treasure2/models/item/wither_planks.json b/src/main/resources/assets/treasure2/models/item/wither_planks.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_planks.json rename to src/main/resources/assets/treasure2/models/item/wither_planks.json diff --git a/src/resources/assets/treasure2/models/item/wither_root_item.json b/src/main/resources/assets/treasure2/models/item/wither_root_item.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_root_item.json rename to src/main/resources/assets/treasure2/models/item/wither_root_item.json diff --git a/src/resources/assets/treasure2/models/item/wither_stick_item.json b/src/main/resources/assets/treasure2/models/item/wither_stick_item.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wither_stick_item.json rename to src/main/resources/assets/treasure2/models/item/wither_stick_item.json diff --git a/src/resources/assets/treasure2/models/item/wood_chest.json b/src/main/resources/assets/treasure2/models/item/wood_chest.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wood_chest.json rename to src/main/resources/assets/treasure2/models/item/wood_chest.json diff --git a/src/resources/assets/treasure2/models/item/wood_key.json b/src/main/resources/assets/treasure2/models/item/wood_key.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wood_key.json rename to src/main/resources/assets/treasure2/models/item/wood_key.json diff --git a/src/resources/assets/treasure2/models/item/wood_lock.json b/src/main/resources/assets/treasure2/models/item/wood_lock.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wood_lock.json rename to src/main/resources/assets/treasure2/models/item/wood_lock.json diff --git a/src/resources/assets/treasure2/models/item/wood_mimic.json b/src/main/resources/assets/treasure2/models/item/wood_mimic.json similarity index 100% rename from src/resources/assets/treasure2/models/item/wood_mimic.json rename to src/main/resources/assets/treasure2/models/item/wood_mimic.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/book.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/book.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/book.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/book.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/chests.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/chests.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/chests.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/chests.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/coins.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/coins.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/coins.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/coins.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/fog.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/fog.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/fog.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/fog.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/general.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/general.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/general.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/general.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/keys.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/keys.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/keys.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/keys.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/markers.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/markers.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/markers.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/markers.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/mobs.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/mobs.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/mobs.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/mobs.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/recipes.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/recipes.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/recipes.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/recipes.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/wells.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/wells.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/wells.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/categories/wells.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/chest_recipes.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/chest_recipes.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/chest_recipes.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/chest_recipes.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/chests/list.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/chests/list.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/chests/list.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/chests/list.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/chests.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/chests.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/chests.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/chests.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/coins.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/coins.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/coins.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/coins.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/rarities.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/rarities.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/rarities.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/rarities.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/treasure_hunting.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/treasure_hunting.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/treasure_hunting.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/treasure_hunting.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/wishing_wells.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/wishing_wells.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/wishing_wells.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/general/wishing_wells.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/key_recipes.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/key_recipes.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/key_recipes.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/key_recipes.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/lock_pick_recipes.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/lock_pick_recipes.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/lock_pick_recipes.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/lock_pick_recipes.json diff --git a/src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/treasure_tool_recipe.json b/src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/treasure_tool_recipe.json similarity index 100% rename from src/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/treasure_tool_recipe.json rename to src/main/resources/assets/treasure2/patchouli_books_disabled/guide/en_us/entries/treasure_tool_recipe.json diff --git a/src/resources/assets/treasure2/recipes/gold_skull_chest.json b/src/main/resources/assets/treasure2/recipes/gold_skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gold_skull_chest.json rename to src/main/resources/assets/treasure2/recipes/gold_skull_chest.json diff --git a/src/resources/assets/treasure2/recipes/gravestone1_cobblestone.json b/src/main/resources/assets/treasure2/recipes/gravestone1_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone1_cobblestone.json rename to src/main/resources/assets/treasure2/recipes/gravestone1_cobblestone.json diff --git a/src/resources/assets/treasure2/recipes/gravestone1_mossy_cobblestone.json b/src/main/resources/assets/treasure2/recipes/gravestone1_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone1_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/recipes/gravestone1_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/recipes/gravestone1_obsidian.json b/src/main/resources/assets/treasure2/recipes/gravestone1_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone1_obsidian.json rename to src/main/resources/assets/treasure2/recipes/gravestone1_obsidian.json diff --git a/src/resources/assets/treasure2/recipes/gravestone1_polished_andesite.json b/src/main/resources/assets/treasure2/recipes/gravestone1_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone1_polished_andesite.json rename to src/main/resources/assets/treasure2/recipes/gravestone1_polished_andesite.json diff --git a/src/resources/assets/treasure2/recipes/gravestone1_polished_diorite.json b/src/main/resources/assets/treasure2/recipes/gravestone1_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone1_polished_diorite.json rename to src/main/resources/assets/treasure2/recipes/gravestone1_polished_diorite.json diff --git a/src/resources/assets/treasure2/recipes/gravestone1_polished_granite.json b/src/main/resources/assets/treasure2/recipes/gravestone1_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone1_polished_granite.json rename to src/main/resources/assets/treasure2/recipes/gravestone1_polished_granite.json diff --git a/src/resources/assets/treasure2/recipes/gravestone1_stone.json b/src/main/resources/assets/treasure2/recipes/gravestone1_stone.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone1_stone.json rename to src/main/resources/assets/treasure2/recipes/gravestone1_stone.json diff --git a/src/resources/assets/treasure2/recipes/gravestone2_cobblestone.json b/src/main/resources/assets/treasure2/recipes/gravestone2_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone2_cobblestone.json rename to src/main/resources/assets/treasure2/recipes/gravestone2_cobblestone.json diff --git a/src/resources/assets/treasure2/recipes/gravestone2_mossy_cobblestone.json b/src/main/resources/assets/treasure2/recipes/gravestone2_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone2_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/recipes/gravestone2_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/recipes/gravestone2_obsidian.json b/src/main/resources/assets/treasure2/recipes/gravestone2_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone2_obsidian.json rename to src/main/resources/assets/treasure2/recipes/gravestone2_obsidian.json diff --git a/src/resources/assets/treasure2/recipes/gravestone2_polished_andesite.json b/src/main/resources/assets/treasure2/recipes/gravestone2_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone2_polished_andesite.json rename to src/main/resources/assets/treasure2/recipes/gravestone2_polished_andesite.json diff --git a/src/resources/assets/treasure2/recipes/gravestone2_polished_diorite.json b/src/main/resources/assets/treasure2/recipes/gravestone2_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone2_polished_diorite.json rename to src/main/resources/assets/treasure2/recipes/gravestone2_polished_diorite.json diff --git a/src/resources/assets/treasure2/recipes/gravestone2_polished_granite.json b/src/main/resources/assets/treasure2/recipes/gravestone2_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone2_polished_granite.json rename to src/main/resources/assets/treasure2/recipes/gravestone2_polished_granite.json diff --git a/src/resources/assets/treasure2/recipes/gravestone2_stone.json b/src/main/resources/assets/treasure2/recipes/gravestone2_stone.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone2_stone.json rename to src/main/resources/assets/treasure2/recipes/gravestone2_stone.json diff --git a/src/resources/assets/treasure2/recipes/gravestone3_mossy_cobblestone.json b/src/main/resources/assets/treasure2/recipes/gravestone3_mossy_cobblestone.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone3_mossy_cobblestone.json rename to src/main/resources/assets/treasure2/recipes/gravestone3_mossy_cobblestone.json diff --git a/src/resources/assets/treasure2/recipes/gravestone3_obsidian.json b/src/main/resources/assets/treasure2/recipes/gravestone3_obsidian.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone3_obsidian.json rename to src/main/resources/assets/treasure2/recipes/gravestone3_obsidian.json diff --git a/src/resources/assets/treasure2/recipes/gravestone3_polished_andesite.json b/src/main/resources/assets/treasure2/recipes/gravestone3_polished_andesite.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone3_polished_andesite.json rename to src/main/resources/assets/treasure2/recipes/gravestone3_polished_andesite.json diff --git a/src/resources/assets/treasure2/recipes/gravestone3_polished_diorite.json b/src/main/resources/assets/treasure2/recipes/gravestone3_polished_diorite.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone3_polished_diorite.json rename to src/main/resources/assets/treasure2/recipes/gravestone3_polished_diorite.json diff --git a/src/resources/assets/treasure2/recipes/gravestone3_polished_granite.json b/src/main/resources/assets/treasure2/recipes/gravestone3_polished_granite.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone3_polished_granite.json rename to src/main/resources/assets/treasure2/recipes/gravestone3_polished_granite.json diff --git a/src/resources/assets/treasure2/recipes/gravestone3_stone.json b/src/main/resources/assets/treasure2/recipes/gravestone3_stone.json similarity index 100% rename from src/resources/assets/treasure2/recipes/gravestone3_stone.json rename to src/main/resources/assets/treasure2/recipes/gravestone3_stone.json diff --git a/src/resources/assets/treasure2/recipes/key_ring.json b/src/main/resources/assets/treasure2/recipes/key_ring.json similarity index 100% rename from src/resources/assets/treasure2/recipes/key_ring.json rename to src/main/resources/assets/treasure2/recipes/key_ring.json diff --git a/src/resources/assets/treasure2/recipes/pilferers_lock_pick.json b/src/main/resources/assets/treasure2/recipes/pilferers_lock_pick.json similarity index 100% rename from src/resources/assets/treasure2/recipes/pilferers_lock_pick.json rename to src/main/resources/assets/treasure2/recipes/pilferers_lock_pick.json diff --git a/src/resources/assets/treasure2/recipes/pouch.json b/src/main/resources/assets/treasure2/recipes/pouch.json similarity index 100% rename from src/resources/assets/treasure2/recipes/pouch.json rename to src/main/resources/assets/treasure2/recipes/pouch.json diff --git a/src/resources/assets/treasure2/recipes/ruby_key.json b/src/main/resources/assets/treasure2/recipes/ruby_key.json similarity index 100% rename from src/resources/assets/treasure2/recipes/ruby_key.json rename to src/main/resources/assets/treasure2/recipes/ruby_key.json diff --git a/src/resources/assets/treasure2/recipes/sapphire_key.json b/src/main/resources/assets/treasure2/recipes/sapphire_key.json similarity index 100% rename from src/resources/assets/treasure2/recipes/sapphire_key.json rename to src/main/resources/assets/treasure2/recipes/sapphire_key.json diff --git a/src/resources/assets/treasure2/recipes/skull_and_crossbones.json b/src/main/resources/assets/treasure2/recipes/skull_and_crossbones.json similarity index 100% rename from src/resources/assets/treasure2/recipes/skull_and_crossbones.json rename to src/main/resources/assets/treasure2/recipes/skull_and_crossbones.json diff --git a/src/resources/assets/treasure2/recipes/skull_chest.json b/src/main/resources/assets/treasure2/recipes/skull_chest.json similarity index 100% rename from src/resources/assets/treasure2/recipes/skull_chest.json rename to src/main/resources/assets/treasure2/recipes/skull_chest.json diff --git a/src/resources/assets/treasure2/recipes/spider_key.json b/src/main/resources/assets/treasure2/recipes/spider_key.json similarity index 100% rename from src/resources/assets/treasure2/recipes/spider_key.json rename to src/main/resources/assets/treasure2/recipes/spider_key.json diff --git a/src/resources/assets/treasure2/recipes/thiefs_lock_pick.json b/src/main/resources/assets/treasure2/recipes/thiefs_lock_pick.json similarity index 100% rename from src/resources/assets/treasure2/recipes/thiefs_lock_pick.json rename to src/main/resources/assets/treasure2/recipes/thiefs_lock_pick.json diff --git a/src/resources/assets/treasure2/recipes/treasure_tool.json b/src/main/resources/assets/treasure2/recipes/treasure_tool.json similarity index 100% rename from src/resources/assets/treasure2/recipes/treasure_tool.json rename to src/main/resources/assets/treasure2/recipes/treasure_tool.json diff --git a/src/resources/assets/treasure2/recipes/wither_key.json b/src/main/resources/assets/treasure2/recipes/wither_key.json similarity index 100% rename from src/resources/assets/treasure2/recipes/wither_key.json rename to src/main/resources/assets/treasure2/recipes/wither_key.json diff --git a/src/resources/assets/treasure2/recipes/wither_planks.json b/src/main/resources/assets/treasure2/recipes/wither_planks.json similarity index 100% rename from src/resources/assets/treasure2/recipes/wither_planks.json rename to src/main/resources/assets/treasure2/recipes/wither_planks.json diff --git a/src/resources/assets/treasure2/structures/aboveground/crypt2.nbt b/src/main/resources/assets/treasure2/structures/aboveground/crypt2.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/aboveground/crypt2.nbt rename to src/main/resources/assets/treasure2/structures/aboveground/crypt2.nbt diff --git a/src/resources/assets/treasure2/structures/aboveground/crypt3.nbt b/src/main/resources/assets/treasure2/structures/aboveground/crypt3.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/aboveground/crypt3.nbt rename to src/main/resources/assets/treasure2/structures/aboveground/crypt3.nbt diff --git a/src/resources/assets/treasure2/structures/underground/basic1.nbt b/src/main/resources/assets/treasure2/structures/underground/basic1.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/underground/basic1.nbt rename to src/main/resources/assets/treasure2/structures/underground/basic1.nbt diff --git a/src/resources/assets/treasure2/structures/underground/basic2.nbt b/src/main/resources/assets/treasure2/structures/underground/basic2.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/underground/basic2.nbt rename to src/main/resources/assets/treasure2/structures/underground/basic2.nbt diff --git a/src/resources/assets/treasure2/structures/underground/basic3.nbt b/src/main/resources/assets/treasure2/structures/underground/basic3.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/underground/basic3.nbt rename to src/main/resources/assets/treasure2/structures/underground/basic3.nbt diff --git a/src/resources/assets/treasure2/structures/underground/basic4.nbt b/src/main/resources/assets/treasure2/structures/underground/basic4.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/underground/basic4.nbt rename to src/main/resources/assets/treasure2/structures/underground/basic4.nbt diff --git a/src/resources/assets/treasure2/structures/underground/basic5.nbt b/src/main/resources/assets/treasure2/structures/underground/basic5.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/underground/basic5.nbt rename to src/main/resources/assets/treasure2/structures/underground/basic5.nbt diff --git a/src/resources/assets/treasure2/structures/underground/cave1.nbt b/src/main/resources/assets/treasure2/structures/underground/cave1.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/underground/cave1.nbt rename to src/main/resources/assets/treasure2/structures/underground/cave1.nbt diff --git a/src/resources/assets/treasure2/structures/underground/cave2.nbt b/src/main/resources/assets/treasure2/structures/underground/cave2.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/underground/cave2.nbt rename to src/main/resources/assets/treasure2/structures/underground/cave2.nbt diff --git a/src/resources/assets/treasure2/structures/underground/cobb1.nbt b/src/main/resources/assets/treasure2/structures/underground/cobb1.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/underground/cobb1.nbt rename to src/main/resources/assets/treasure2/structures/underground/cobb1.nbt diff --git a/src/resources/assets/treasure2/structures/underground/crypt1.nbt b/src/main/resources/assets/treasure2/structures/underground/crypt1.nbt similarity index 100% rename from src/resources/assets/treasure2/structures/underground/crypt1.nbt rename to src/main/resources/assets/treasure2/structures/underground/crypt1.nbt diff --git a/src/resources/assets/treasure2/textures/blocks/blackstone.png b/src/main/resources/assets/treasure2/textures/blocks/blackstone.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/blackstone.png rename to src/main/resources/assets/treasure2/textures/blocks/blackstone.png diff --git a/src/resources/assets/treasure2/textures/blocks/blackstone_top.png b/src/main/resources/assets/treasure2/textures/blocks/blackstone_top.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/blackstone_top.png rename to src/main/resources/assets/treasure2/textures/blocks/blackstone_top.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/SpiderChest2ItemBlock.bbmodel b/src/main/resources/assets/treasure2/textures/blocks/chests/SpiderChest2ItemBlock.bbmodel similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/SpiderChest2ItemBlock.bbmodel rename to src/main/resources/assets/treasure2/textures/blocks/chests/SpiderChest2ItemBlock.bbmodel diff --git a/src/resources/assets/treasure2/textures/blocks/chests/band.png b/src/main/resources/assets/treasure2/textures/blocks/chests/band.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/band.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/band.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/cauldron_chest_front.png b/src/main/resources/assets/treasure2/textures/blocks/chests/cauldron_chest_front.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/cauldron_chest_front.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/cauldron_chest_front.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/cauldron_chest_side.png b/src/main/resources/assets/treasure2/textures/blocks/chests/cauldron_chest_side.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/cauldron_chest_side.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/cauldron_chest_side.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/compressor_chest_side.png b/src/main/resources/assets/treasure2/textures/blocks/chests/compressor_chest_side.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/compressor_chest_side.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/compressor_chest_side.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/compressor_chest_up.png b/src/main/resources/assets/treasure2/textures/blocks/chests/compressor_chest_up.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/compressor_chest_up.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/compressor_chest_up.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/crate_chest_board.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crate_chest_board.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/crate_chest_board.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/crate_chest_board.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/crate_chest_metal.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crate_chest_metal.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/crate_chest_metal.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/crate_chest_metal.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/crate_chest_moldy_board.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crate_chest_moldy_board.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/crate_chest_moldy_board.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/crate_chest_moldy_board.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/crate_chest_moldy_north.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crate_chest_moldy_north.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/crate_chest_moldy_north.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/crate_chest_moldy_north.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/crate_chest_north.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crate_chest_north.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/crate_chest_north.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/crate_chest_north.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_iron.png b/src/main/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_iron.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_iron.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_iron.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_lid_side.png b/src/main/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_lid_side.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_lid_side.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_lid_side.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_side.png b/src/main/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_side.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_side.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/dread_pirate_chest_side.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/dread_pirate_skull_front.png b/src/main/resources/assets/treasure2/textures/blocks/chests/dread_pirate_skull_front.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/dread_pirate_skull_front.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/dread_pirate_skull_front.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/dread_pirate_skull_mouth.png b/src/main/resources/assets/treasure2/textures/blocks/chests/dread_pirate_skull_mouth.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/dread_pirate_skull_mouth.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/dread_pirate_skull_mouth.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/gold_skull_eyes.png b/src/main/resources/assets/treasure2/textures/blocks/chests/gold_skull_eyes.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/gold_skull_eyes.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/gold_skull_eyes.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/gold_skull_mouth_front.png b/src/main/resources/assets/treasure2/textures/blocks/chests/gold_skull_mouth_front.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/gold_skull_mouth_front.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/gold_skull_mouth_front.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/gold_skull_texture.png b/src/main/resources/assets/treasure2/textures/blocks/chests/gold_skull_texture.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/gold_skull_texture.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/gold_skull_texture.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_chest.json b/src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_chest.json similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_chest.json rename to src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_chest.json diff --git a/src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_foot.png b/src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_foot.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_foot.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_foot.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_front.png b/src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_front.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_front.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_front.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_pad.png b/src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_pad.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_pad.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_pad.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_side.png b/src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_side.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_side.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_side.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_up.png b/src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_up.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_up.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/gold_strongbox_up.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_foot.png b/src/main/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_foot.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_foot.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_foot.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_front.png b/src/main/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_front.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_front.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_front.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_pad.png b/src/main/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_pad.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_pad.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_pad.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_side.png b/src/main/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_side.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_side.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_side.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_up.png b/src/main/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_up.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_up.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/iron_strongbox_up.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/pirate_chest_east.png b/src/main/resources/assets/treasure2/textures/blocks/chests/pirate_chest_east.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/pirate_chest_east.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/pirate_chest_east.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/pirate_chest_east2.png b/src/main/resources/assets/treasure2/textures/blocks/chests/pirate_chest_east2.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/pirate_chest_east2.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/pirate_chest_east2.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/pirate_chest_north.png b/src/main/resources/assets/treasure2/textures/blocks/chests/pirate_chest_north.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/pirate_chest_north.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/pirate_chest_north.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/pirate_chest_up.png b/src/main/resources/assets/treasure2/textures/blocks/chests/pirate_chest_up.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/pirate_chest_up.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/pirate_chest_up.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/safe-foot.png b/src/main/resources/assets/treasure2/textures/blocks/chests/safe-foot.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/safe-foot.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/safe-foot.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/safe-handle.png b/src/main/resources/assets/treasure2/textures/blocks/chests/safe-handle.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/safe-handle.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/safe-handle.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/safe-side.png b/src/main/resources/assets/treasure2/textures/blocks/chests/safe-side.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/safe-side.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/safe-side.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/skull_eyes.png b/src/main/resources/assets/treasure2/textures/blocks/chests/skull_eyes.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/skull_eyes.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/skull_eyes.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/skull_mouth_front.png b/src/main/resources/assets/treasure2/textures/blocks/chests/skull_mouth_front.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/skull_mouth_front.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/skull_mouth_front.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/skull_texture.png b/src/main/resources/assets/treasure2/textures/blocks/chests/skull_texture.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/skull_texture.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/skull_texture.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/spider_body.png b/src/main/resources/assets/treasure2/textures/blocks/chests/spider_body.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/spider_body.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/spider_body.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/spider_head.png b/src/main/resources/assets/treasure2/textures/blocks/chests/spider_head.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/spider_head.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/spider_head.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/spider_legs.png b/src/main/resources/assets/treasure2/textures/blocks/chests/spider_legs.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/spider_legs.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/spider_legs.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/viking-chest.png b/src/main/resources/assets/treasure2/textures/blocks/chests/viking-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/viking-chest.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/viking-chest.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/wither_chest_east.png b/src/main/resources/assets/treasure2/textures/blocks/chests/wither_chest_east.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/wither_chest_east.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/wither_chest_east.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/wither_chest_front.png b/src/main/resources/assets/treasure2/textures/blocks/chests/wither_chest_front.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/wither_chest_front.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/wither_chest_front.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/wood_chest_east.png b/src/main/resources/assets/treasure2/textures/blocks/chests/wood_chest_east.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/wood_chest_east.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/wood_chest_east.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/wood_chest_north.png b/src/main/resources/assets/treasure2/textures/blocks/chests/wood_chest_north.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/wood_chest_north.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/wood_chest_north.png diff --git a/src/resources/assets/treasure2/textures/blocks/chests/wood_chest_up.png b/src/main/resources/assets/treasure2/textures/blocks/chests/wood_chest_up.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/chests/wood_chest_up.png rename to src/main/resources/assets/treasure2/textures/blocks/chests/wood_chest_up.png diff --git a/src/resources/assets/treasure2/textures/blocks/crossbone.png b/src/main/resources/assets/treasure2/textures/blocks/crossbone.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/crossbone.png rename to src/main/resources/assets/treasure2/textures/blocks/crossbone.png diff --git a/src/resources/assets/treasure2/textures/blocks/fog.png b/src/main/resources/assets/treasure2/textures/blocks/fog.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/fog.png rename to src/main/resources/assets/treasure2/textures/blocks/fog.png diff --git a/src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_bricks.png b/src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_bricks.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_bricks.png rename to src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_bricks.png diff --git a/src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_cobblestone.png b/src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_cobblestone.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_cobblestone.png rename to src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_cobblestone.png diff --git a/src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_dirt.png b/src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_dirt.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_dirt.png rename to src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_dirt.png diff --git a/src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_lava.png b/src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_lava.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_lava.png rename to src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_lava.png diff --git a/src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_sand.png b/src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_sand.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_sand.png rename to src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_sand.png diff --git a/src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_water.png b/src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_water.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_water.png rename to src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_water.png diff --git a/src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_wood.png b/src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_wood.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_wood.png rename to src/main/resources/assets/treasure2/textures/blocks/paintings/painting_blocks_wood.png diff --git a/src/resources/assets/treasure2/textures/blocks/paintings/painting_frame.png b/src/main/resources/assets/treasure2/textures/blocks/paintings/painting_frame.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/paintings/painting_frame.png rename to src/main/resources/assets/treasure2/textures/blocks/paintings/painting_frame.png diff --git a/src/resources/assets/treasure2/textures/blocks/poison_fog.png b/src/main/resources/assets/treasure2/textures/blocks/poison_fog.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/poison_fog.png rename to src/main/resources/assets/treasure2/textures/blocks/poison_fog.png diff --git a/src/resources/assets/treasure2/textures/blocks/ruby_nugget.png b/src/main/resources/assets/treasure2/textures/blocks/ruby_nugget.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/ruby_nugget.png rename to src/main/resources/assets/treasure2/textures/blocks/ruby_nugget.png diff --git a/src/resources/assets/treasure2/textures/blocks/sapphire_nugget.png b/src/main/resources/assets/treasure2/textures/blocks/sapphire_nugget.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/sapphire_nugget.png rename to src/main/resources/assets/treasure2/textures/blocks/sapphire_nugget.png diff --git a/src/resources/assets/treasure2/textures/blocks/skeleton_body.png b/src/main/resources/assets/treasure2/textures/blocks/skeleton_body.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/skeleton_body.png rename to src/main/resources/assets/treasure2/textures/blocks/skeleton_body.png diff --git a/src/resources/assets/treasure2/textures/blocks/skeleton_bottom.png b/src/main/resources/assets/treasure2/textures/blocks/skeleton_bottom.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/skeleton_bottom.png rename to src/main/resources/assets/treasure2/textures/blocks/skeleton_bottom.png diff --git a/src/resources/assets/treasure2/textures/blocks/skeleton_head.png b/src/main/resources/assets/treasure2/textures/blocks/skeleton_head.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/skeleton_head.png rename to src/main/resources/assets/treasure2/textures/blocks/skeleton_head.png diff --git a/src/resources/assets/treasure2/textures/blocks/skull_east.png b/src/main/resources/assets/treasure2/textures/blocks/skull_east.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/skull_east.png rename to src/main/resources/assets/treasure2/textures/blocks/skull_east.png diff --git a/src/resources/assets/treasure2/textures/blocks/skull_grave1.png b/src/main/resources/assets/treasure2/textures/blocks/skull_grave1.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/skull_grave1.png rename to src/main/resources/assets/treasure2/textures/blocks/skull_grave1.png diff --git a/src/resources/assets/treasure2/textures/blocks/skull_north.png b/src/main/resources/assets/treasure2/textures/blocks/skull_north.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/skull_north.png rename to src/main/resources/assets/treasure2/textures/blocks/skull_north.png diff --git a/src/resources/assets/treasure2/textures/blocks/skull_south.png b/src/main/resources/assets/treasure2/textures/blocks/skull_south.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/skull_south.png rename to src/main/resources/assets/treasure2/textures/blocks/skull_south.png diff --git a/src/resources/assets/treasure2/textures/blocks/skullandcrossbones.png b/src/main/resources/assets/treasure2/textures/blocks/skullandcrossbones.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/skullandcrossbones.png rename to src/main/resources/assets/treasure2/textures/blocks/skullandcrossbones.png diff --git a/src/resources/assets/treasure2/textures/blocks/spanish_moss.png b/src/main/resources/assets/treasure2/textures/blocks/spanish_moss.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/spanish_moss.png rename to src/main/resources/assets/treasure2/textures/blocks/spanish_moss.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_branch.png b/src/main/resources/assets/treasure2/textures/blocks/wither_branch.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_branch.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_branch.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_fog.png b/src/main/resources/assets/treasure2/textures/blocks/wither_fog.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_fog.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_fog.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_log.png b/src/main/resources/assets/treasure2/textures/blocks/wither_log.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_log.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_log.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_log_2.png b/src/main/resources/assets/treasure2/textures/blocks/wither_log_2.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_log_2.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_log_2.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_log_OLD.png b/src/main/resources/assets/treasure2/textures/blocks/wither_log_OLD.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_log_OLD.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_log_OLD.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_log_face.png b/src/main/resources/assets/treasure2/textures/blocks/wither_log_face.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_log_face.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_log_face.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_log_mossy.png b/src/main/resources/assets/treasure2/textures/blocks/wither_log_mossy.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_log_mossy.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_log_mossy.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_log_top.png b/src/main/resources/assets/treasure2/textures/blocks/wither_log_top.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_log_top.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_log_top.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_log_top_2.png b/src/main/resources/assets/treasure2/textures/blocks/wither_log_top_2.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_log_top_2.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_log_top_2.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_log_top_OLD.png b/src/main/resources/assets/treasure2/textures/blocks/wither_log_top_OLD.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_log_top_OLD.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_log_top_OLD.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_moss.png b/src/main/resources/assets/treasure2/textures/blocks/wither_moss.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_moss.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_moss.png diff --git a/src/resources/assets/treasure2/textures/blocks/wither_planks.png b/src/main/resources/assets/treasure2/textures/blocks/wither_planks.png similarity index 100% rename from src/resources/assets/treasure2/textures/blocks/wither_planks.png rename to src/main/resources/assets/treasure2/textures/blocks/wither_planks.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/cauldron-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/cauldron-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/cauldron-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/cauldron-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/clam-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/clam-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/clam-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/clam-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/compressor-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/compressor-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/compressor-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/compressor-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/crate-chest-moldy.png b/src/main/resources/assets/treasure2/textures/entity/chest/crate-chest-moldy.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/crate-chest-moldy.png rename to src/main/resources/assets/treasure2/textures/entity/chest/crate-chest-moldy.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/crate-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/crate-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/crate-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/crate-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/dread-pirate-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/dread-pirate-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/dread-pirate-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/dread-pirate-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/gold-skull-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/gold-skull-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/gold-skull-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/gold-skull-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/gold-strongbox.png b/src/main/resources/assets/treasure2/textures/entity/chest/gold-strongbox.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/gold-strongbox.png rename to src/main/resources/assets/treasure2/textures/entity/chest/gold-strongbox.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/iron-strongbox.png b/src/main/resources/assets/treasure2/textures/entity/chest/iron-strongbox.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/iron-strongbox.png rename to src/main/resources/assets/treasure2/textures/entity/chest/iron-strongbox.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/ironbound-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/ironbound-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/ironbound-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/ironbound-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/oyster-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/oyster-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/oyster-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/oyster-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/pirate-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/pirate-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/pirate-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/pirate-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/safe.png b/src/main/resources/assets/treasure2/textures/entity/chest/safe.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/safe.png rename to src/main/resources/assets/treasure2/textures/entity/chest/safe.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/skull-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/skull-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/skull-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/skull-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/spider-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/spider-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/spider-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/spider-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/standard-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/standard-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/standard-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/standard-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/test-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/test-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/test-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/test-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/viking-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/viking-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/viking-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/viking-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/whale-bone-pirate-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/whale-bone-pirate-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/whale-bone-pirate-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/whale-bone-pirate-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/wither-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/wither-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/wither-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/wither-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/chest/wood-chest.png b/src/main/resources/assets/treasure2/textures/entity/chest/wood-chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/chest/wood-chest.png rename to src/main/resources/assets/treasure2/textures/entity/chest/wood-chest.png diff --git a/src/resources/assets/treasure2/textures/entity/mob/bound-soul.png b/src/main/resources/assets/treasure2/textures/entity/mob/bound-soul.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/mob/bound-soul.png rename to src/main/resources/assets/treasure2/textures/entity/mob/bound-soul.png diff --git a/src/resources/assets/treasure2/textures/entity/mob/pirate-mimic.png b/src/main/resources/assets/treasure2/textures/entity/mob/pirate-mimic.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/mob/pirate-mimic.png rename to src/main/resources/assets/treasure2/textures/entity/mob/pirate-mimic.png diff --git a/src/resources/assets/treasure2/textures/entity/mob/wood-mimic.png b/src/main/resources/assets/treasure2/textures/entity/mob/wood-mimic.png similarity index 100% rename from src/resources/assets/treasure2/textures/entity/mob/wood-mimic.png rename to src/main/resources/assets/treasure2/textures/entity/mob/wood-mimic.png diff --git a/src/resources/assets/treasure2/textures/gui/container/apprentices_pouch.png b/src/main/resources/assets/treasure2/textures/gui/container/apprentices_pouch.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/apprentices_pouch.png rename to src/main/resources/assets/treasure2/textures/gui/container/apprentices_pouch.png diff --git a/src/resources/assets/treasure2/textures/gui/container/armoire.png b/src/main/resources/assets/treasure2/textures/gui/container/armoire.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/armoire.png rename to src/main/resources/assets/treasure2/textures/gui/container/armoire.png diff --git a/src/resources/assets/treasure2/textures/gui/container/compressor_chest.png b/src/main/resources/assets/treasure2/textures/gui/container/compressor_chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/compressor_chest.png rename to src/main/resources/assets/treasure2/textures/gui/container/compressor_chest.png diff --git a/src/resources/assets/treasure2/textures/gui/container/key_ring.png b/src/main/resources/assets/treasure2/textures/gui/container/key_ring.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/key_ring.png rename to src/main/resources/assets/treasure2/textures/gui/container/key_ring.png diff --git a/src/resources/assets/treasure2/textures/gui/container/lucky_pouch.png b/src/main/resources/assets/treasure2/textures/gui/container/lucky_pouch.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/lucky_pouch.png rename to src/main/resources/assets/treasure2/textures/gui/container/lucky_pouch.png diff --git a/src/resources/assets/treasure2/textures/gui/container/masters_pouch.png b/src/main/resources/assets/treasure2/textures/gui/container/masters_pouch.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/masters_pouch.png rename to src/main/resources/assets/treasure2/textures/gui/container/masters_pouch.png diff --git a/src/resources/assets/treasure2/textures/gui/container/mollusc_chest.png b/src/main/resources/assets/treasure2/textures/gui/container/mollusc_chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/mollusc_chest.png rename to src/main/resources/assets/treasure2/textures/gui/container/mollusc_chest.png diff --git a/src/resources/assets/treasure2/textures/gui/container/pouch.png b/src/main/resources/assets/treasure2/textures/gui/container/pouch.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/pouch.png rename to src/main/resources/assets/treasure2/textures/gui/container/pouch.png diff --git a/src/resources/assets/treasure2/textures/gui/container/skull_chest.png b/src/main/resources/assets/treasure2/textures/gui/container/skull_chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/skull_chest.png rename to src/main/resources/assets/treasure2/textures/gui/container/skull_chest.png diff --git a/src/resources/assets/treasure2/textures/gui/container/strongbox.png b/src/main/resources/assets/treasure2/textures/gui/container/strongbox.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/strongbox.png rename to src/main/resources/assets/treasure2/textures/gui/container/strongbox.png diff --git a/src/resources/assets/treasure2/textures/gui/container/treasure_chest.png b/src/main/resources/assets/treasure2/textures/gui/container/treasure_chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/treasure_chest.png rename to src/main/resources/assets/treasure2/textures/gui/container/treasure_chest.png diff --git a/src/resources/assets/treasure2/textures/gui/container/wither_chest.png b/src/main/resources/assets/treasure2/textures/gui/container/wither_chest.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/container/wither_chest.png rename to src/main/resources/assets/treasure2/textures/gui/container/wither_chest.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/church1.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/church1.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/church1.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/church1.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard1.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard1.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard1.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard1.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard2.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard2.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard2.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard2.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard3.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard3.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard3.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard3.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard4.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard4.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard4.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/graveyard4.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/sunkenship1.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/sunkenship1.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/sunkenship1.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/sunkenship1.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/sunkenship2.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/sunkenship2.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/sunkenship2.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/sunkenship2.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/tower1.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/tower1.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/tower1.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/tower1.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/tower2.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/tower2.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/tower2.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/tower2.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/tower3.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/tower3.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/tower3.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/tower3.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/well1.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/well1.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/well1.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/well1.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/withergrove1.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/withergrove1.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/withergrove1.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/withergrove1.png diff --git a/src/resources/assets/treasure2/textures/gui/patchouli/guide/withergrove2.png b/src/main/resources/assets/treasure2/textures/gui/patchouli/guide/withergrove2.png similarity index 100% rename from src/resources/assets/treasure2/textures/gui/patchouli/guide/withergrove2.png rename to src/main/resources/assets/treasure2/textures/gui/patchouli/guide/withergrove2.png diff --git a/src/resources/assets/treasure2/textures/items/32/iron_key.png b/src/main/resources/assets/treasure2/textures/items/32/iron_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/32/iron_key.png rename to src/main/resources/assets/treasure2/textures/items/32/iron_key.png diff --git a/src/resources/assets/treasure2/textures/items/New Microsoft Publisher Document.pub b/src/main/resources/assets/treasure2/textures/items/New Microsoft Publisher Document.pub similarity index 100% rename from src/resources/assets/treasure2/textures/items/New Microsoft Publisher Document.pub rename to src/main/resources/assets/treasure2/textures/items/New Microsoft Publisher Document.pub diff --git a/src/resources/assets/treasure2/textures/items/apprentices_pouch.png b/src/main/resources/assets/treasure2/textures/items/apprentices_pouch.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/apprentices_pouch.png rename to src/main/resources/assets/treasure2/textures/items/apprentices_pouch.png diff --git a/src/resources/assets/treasure2/textures/items/arcane_pouch.png b/src/main/resources/assets/treasure2/textures/items/arcane_pouch.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/arcane_pouch.png rename to src/main/resources/assets/treasure2/textures/items/arcane_pouch.png diff --git a/src/resources/assets/treasure2/textures/items/black_pearl_10.png b/src/main/resources/assets/treasure2/textures/items/black_pearl_10.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/black_pearl_10.png rename to src/main/resources/assets/treasure2/textures/items/black_pearl_10.png diff --git a/src/resources/assets/treasure2/textures/items/black_pearl_12.png b/src/main/resources/assets/treasure2/textures/items/black_pearl_12.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/black_pearl_12.png rename to src/main/resources/assets/treasure2/textures/items/black_pearl_12.png diff --git a/src/resources/assets/treasure2/textures/items/charmed_ruby.png b/src/main/resources/assets/treasure2/textures/items/charmed_ruby.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/charmed_ruby.png rename to src/main/resources/assets/treasure2/textures/items/charmed_ruby.png diff --git a/src/resources/assets/treasure2/textures/items/charmed_sapphire.png b/src/main/resources/assets/treasure2/textures/items/charmed_sapphire.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/charmed_sapphire.png rename to src/main/resources/assets/treasure2/textures/items/charmed_sapphire.png diff --git a/src/resources/assets/treasure2/textures/items/coins/charmed_gold_coin.png b/src/main/resources/assets/treasure2/textures/items/coins/charmed_gold_coin.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/coins/charmed_gold_coin.png rename to src/main/resources/assets/treasure2/textures/items/coins/charmed_gold_coin.png diff --git a/src/resources/assets/treasure2/textures/items/coins/charmed_silver_coin.png b/src/main/resources/assets/treasure2/textures/items/coins/charmed_silver_coin.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/coins/charmed_silver_coin.png rename to src/main/resources/assets/treasure2/textures/items/coins/charmed_silver_coin.png diff --git a/src/resources/assets/treasure2/textures/items/coins/gold_coin.png b/src/main/resources/assets/treasure2/textures/items/coins/gold_coin.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/coins/gold_coin.png rename to src/main/resources/assets/treasure2/textures/items/coins/gold_coin.png diff --git a/src/resources/assets/treasure2/textures/items/coins/silver_coin.png b/src/main/resources/assets/treasure2/textures/items/coins/silver_coin.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/coins/silver_coin.png rename to src/main/resources/assets/treasure2/textures/items/coins/silver_coin.png diff --git a/src/resources/assets/treasure2/textures/items/eye_patch.png b/src/main/resources/assets/treasure2/textures/items/eye_patch.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/eye_patch.png rename to src/main/resources/assets/treasure2/textures/items/eye_patch.png diff --git a/src/resources/assets/treasure2/textures/items/keys/diamond_key.png b/src/main/resources/assets/treasure2/textures/items/keys/diamond_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/diamond_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/diamond_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/ember_key.png b/src/main/resources/assets/treasure2/textures/items/keys/ember_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/ember_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/ember_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/emerald_key.png b/src/main/resources/assets/treasure2/textures/items/keys/emerald_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/emerald_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/emerald_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/gold_key.png b/src/main/resources/assets/treasure2/textures/items/keys/gold_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/gold_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/gold_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/iron_key.png b/src/main/resources/assets/treasure2/textures/items/keys/iron_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/iron_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/iron_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/jewelled_key.png b/src/main/resources/assets/treasure2/textures/items/keys/jewelled_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/jewelled_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/jewelled_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/key_ring.png b/src/main/resources/assets/treasure2/textures/items/keys/key_ring.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/key_ring.png rename to src/main/resources/assets/treasure2/textures/items/keys/key_ring.png diff --git a/src/resources/assets/treasure2/textures/items/keys/key_ring_old.png b/src/main/resources/assets/treasure2/textures/items/keys/key_ring_old.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/key_ring_old.png rename to src/main/resources/assets/treasure2/textures/items/keys/key_ring_old.png diff --git a/src/resources/assets/treasure2/textures/items/keys/leaf_key.png b/src/main/resources/assets/treasure2/textures/items/keys/leaf_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/leaf_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/leaf_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/lightning_key.png b/src/main/resources/assets/treasure2/textures/items/keys/lightning_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/lightning_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/lightning_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/metallurgists_key.png b/src/main/resources/assets/treasure2/textures/items/keys/metallurgists_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/metallurgists_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/metallurgists_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/pilferers_lock_pick.png b/src/main/resources/assets/treasure2/textures/items/keys/pilferers_lock_pick.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/pilferers_lock_pick.png rename to src/main/resources/assets/treasure2/textures/items/keys/pilferers_lock_pick.png diff --git a/src/resources/assets/treasure2/textures/items/keys/ruby_key.png b/src/main/resources/assets/treasure2/textures/items/keys/ruby_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/ruby_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/ruby_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/sapphire_key.png b/src/main/resources/assets/treasure2/textures/items/keys/sapphire_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/sapphire_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/sapphire_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/skeleton_key.png b/src/main/resources/assets/treasure2/textures/items/keys/skeleton_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/skeleton_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/skeleton_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/spider_key.png b/src/main/resources/assets/treasure2/textures/items/keys/spider_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/spider_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/spider_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/stone_key.png b/src/main/resources/assets/treasure2/textures/items/keys/stone_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/stone_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/stone_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/thiefs_lock_pick.png b/src/main/resources/assets/treasure2/textures/items/keys/thiefs_lock_pick.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/thiefs_lock_pick.png rename to src/main/resources/assets/treasure2/textures/items/keys/thiefs_lock_pick.png diff --git a/src/resources/assets/treasure2/textures/items/keys/wither_key.png b/src/main/resources/assets/treasure2/textures/items/keys/wither_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/wither_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/wither_key.png diff --git a/src/resources/assets/treasure2/textures/items/keys/wood_key.png b/src/main/resources/assets/treasure2/textures/items/keys/wood_key.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/keys/wood_key.png rename to src/main/resources/assets/treasure2/textures/items/keys/wood_key.png diff --git a/src/resources/assets/treasure2/textures/items/locks/diamond_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/diamond_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/diamond_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/diamond_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/ember_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/ember_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/ember_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/ember_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/emerald_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/emerald_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/emerald_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/emerald_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/gold_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/gold_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/gold_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/gold_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/iron_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/iron_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/iron_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/iron_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/leaf_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/leaf_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/leaf_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/leaf_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/ruby_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/ruby_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/ruby_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/ruby_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/ruby_lock2.png b/src/main/resources/assets/treasure2/textures/items/locks/ruby_lock2.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/ruby_lock2.png rename to src/main/resources/assets/treasure2/textures/items/locks/ruby_lock2.png diff --git a/src/resources/assets/treasure2/textures/items/locks/sapphire_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/sapphire_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/sapphire_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/sapphire_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/sapphire_lock2.png b/src/main/resources/assets/treasure2/textures/items/locks/sapphire_lock2.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/sapphire_lock2.png rename to src/main/resources/assets/treasure2/textures/items/locks/sapphire_lock2.png diff --git a/src/resources/assets/treasure2/textures/items/locks/spider_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/spider_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/spider_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/spider_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/stone_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/stone_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/stone_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/stone_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/wither_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/wither_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/wither_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/wither_lock.png diff --git a/src/resources/assets/treasure2/textures/items/locks/wood_lock.png b/src/main/resources/assets/treasure2/textures/items/locks/wood_lock.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/locks/wood_lock.png rename to src/main/resources/assets/treasure2/textures/items/locks/wood_lock.png diff --git a/src/resources/assets/treasure2/textures/items/lucky_pouch.png b/src/main/resources/assets/treasure2/textures/items/lucky_pouch.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/lucky_pouch.png rename to src/main/resources/assets/treasure2/textures/items/lucky_pouch.png diff --git a/src/resources/assets/treasure2/textures/items/masters_pouch.png b/src/main/resources/assets/treasure2/textures/items/masters_pouch.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/masters_pouch.png rename to src/main/resources/assets/treasure2/textures/items/masters_pouch.png diff --git a/src/resources/assets/treasure2/textures/items/oyster_meat.png b/src/main/resources/assets/treasure2/textures/items/oyster_meat.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/oyster_meat.png rename to src/main/resources/assets/treasure2/textures/items/oyster_meat.png diff --git a/src/resources/assets/treasure2/textures/items/painting_item1x1.png b/src/main/resources/assets/treasure2/textures/items/painting_item1x1.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/painting_item1x1.png rename to src/main/resources/assets/treasure2/textures/items/painting_item1x1.png diff --git a/src/resources/assets/treasure2/textures/items/painting_item2x1.png b/src/main/resources/assets/treasure2/textures/items/painting_item2x1.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/painting_item2x1.png rename to src/main/resources/assets/treasure2/textures/items/painting_item2x1.png diff --git a/src/resources/assets/treasure2/textures/items/pouch.png b/src/main/resources/assets/treasure2/textures/items/pouch.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/pouch.png rename to src/main/resources/assets/treasure2/textures/items/pouch.png diff --git a/src/resources/assets/treasure2/textures/items/ruby.png b/src/main/resources/assets/treasure2/textures/items/ruby.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/ruby.png rename to src/main/resources/assets/treasure2/textures/items/ruby.png diff --git a/src/resources/assets/treasure2/textures/items/sapphire.png b/src/main/resources/assets/treasure2/textures/items/sapphire.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/sapphire.png rename to src/main/resources/assets/treasure2/textures/items/sapphire.png diff --git a/src/resources/assets/treasure2/textures/items/skeleton_item.png b/src/main/resources/assets/treasure2/textures/items/skeleton_item.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/skeleton_item.png rename to src/main/resources/assets/treasure2/textures/items/skeleton_item.png diff --git a/src/resources/assets/treasure2/textures/items/skull_sword.png b/src/main/resources/assets/treasure2/textures/items/skull_sword.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/skull_sword.png rename to src/main/resources/assets/treasure2/textures/items/skull_sword.png diff --git a/src/resources/assets/treasure2/textures/items/treasure_tab.png b/src/main/resources/assets/treasure2/textures/items/treasure_tab.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/treasure_tab.png rename to src/main/resources/assets/treasure2/textures/items/treasure_tab.png diff --git a/src/resources/assets/treasure2/textures/items/treasure_tab_old.png b/src/main/resources/assets/treasure2/textures/items/treasure_tab_old.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/treasure_tab_old.png rename to src/main/resources/assets/treasure2/textures/items/treasure_tab_old.png diff --git a/src/resources/assets/treasure2/textures/items/treasure_tool.png b/src/main/resources/assets/treasure2/textures/items/treasure_tool.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/treasure_tool.png rename to src/main/resources/assets/treasure2/textures/items/treasure_tool.png diff --git a/src/resources/assets/treasure2/textures/items/white_pearl.png b/src/main/resources/assets/treasure2/textures/items/white_pearl.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/white_pearl.png rename to src/main/resources/assets/treasure2/textures/items/white_pearl.png diff --git a/src/resources/assets/treasure2/textures/items/white_pearl_10.png b/src/main/resources/assets/treasure2/textures/items/white_pearl_10.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/white_pearl_10.png rename to src/main/resources/assets/treasure2/textures/items/white_pearl_10.png diff --git a/src/resources/assets/treasure2/textures/items/white_pearl_12.png b/src/main/resources/assets/treasure2/textures/items/white_pearl_12.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/white_pearl_12.png rename to src/main/resources/assets/treasure2/textures/items/white_pearl_12.png diff --git a/src/resources/assets/treasure2/textures/items/wither_root.png b/src/main/resources/assets/treasure2/textures/items/wither_root.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/wither_root.png rename to src/main/resources/assets/treasure2/textures/items/wither_root.png diff --git a/src/resources/assets/treasure2/textures/items/wither_stick.png b/src/main/resources/assets/treasure2/textures/items/wither_stick.png similarity index 100% rename from src/resources/assets/treasure2/textures/items/wither_stick.png rename to src/main/resources/assets/treasure2/textures/items/wither_stick.png diff --git a/src/resources/assets/treasure2/textures/models/armor/eye_patch.png b/src/main/resources/assets/treasure2/textures/models/armor/eye_patch.png similarity index 100% rename from src/resources/assets/treasure2/textures/models/armor/eye_patch.png rename to src/main/resources/assets/treasure2/textures/models/armor/eye_patch.png diff --git a/src/resources/assets/treasure2/textures/models/armor/eye_patch_model.png b/src/main/resources/assets/treasure2/textures/models/armor/eye_patch_model.png similarity index 100% rename from src/resources/assets/treasure2/textures/models/armor/eye_patch_model.png rename to src/main/resources/assets/treasure2/textures/models/armor/eye_patch_model.png diff --git a/src/resources/assets/treasure2/textures/particle/mist_particle.png b/src/main/resources/assets/treasure2/textures/particle/mist_particle.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/mist_particle.png rename to src/main/resources/assets/treasure2/textures/particle/mist_particle.png diff --git a/src/resources/assets/treasure2/textures/particle/mist_particle2.png b/src/main/resources/assets/treasure2/textures/particle/mist_particle2.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/mist_particle2.png rename to src/main/resources/assets/treasure2/textures/particle/mist_particle2.png diff --git a/src/resources/assets/treasure2/textures/particle/mist_particle3.png b/src/main/resources/assets/treasure2/textures/particle/mist_particle3.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/mist_particle3.png rename to src/main/resources/assets/treasure2/textures/particle/mist_particle3.png diff --git a/src/resources/assets/treasure2/textures/particle/mist_particle4.png b/src/main/resources/assets/treasure2/textures/particle/mist_particle4.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/mist_particle4.png rename to src/main/resources/assets/treasure2/textures/particle/mist_particle4.png diff --git a/src/resources/assets/treasure2/textures/particle/poison_mist_particle.png b/src/main/resources/assets/treasure2/textures/particle/poison_mist_particle.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/poison_mist_particle.png rename to src/main/resources/assets/treasure2/textures/particle/poison_mist_particle.png diff --git a/src/resources/assets/treasure2/textures/particle/poison_mist_particle2.png b/src/main/resources/assets/treasure2/textures/particle/poison_mist_particle2.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/poison_mist_particle2.png rename to src/main/resources/assets/treasure2/textures/particle/poison_mist_particle2.png diff --git a/src/resources/assets/treasure2/textures/particle/poison_mist_particle3.png b/src/main/resources/assets/treasure2/textures/particle/poison_mist_particle3.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/poison_mist_particle3.png rename to src/main/resources/assets/treasure2/textures/particle/poison_mist_particle3.png diff --git a/src/resources/assets/treasure2/textures/particle/poison_mist_particle4.png b/src/main/resources/assets/treasure2/textures/particle/poison_mist_particle4.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/poison_mist_particle4.png rename to src/main/resources/assets/treasure2/textures/particle/poison_mist_particle4.png diff --git a/src/resources/assets/treasure2/textures/particle/wither_mist_particle.png b/src/main/resources/assets/treasure2/textures/particle/wither_mist_particle.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/wither_mist_particle.png rename to src/main/resources/assets/treasure2/textures/particle/wither_mist_particle.png diff --git a/src/resources/assets/treasure2/textures/particle/wither_mist_particle2.png b/src/main/resources/assets/treasure2/textures/particle/wither_mist_particle2.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/wither_mist_particle2.png rename to src/main/resources/assets/treasure2/textures/particle/wither_mist_particle2.png diff --git a/src/resources/assets/treasure2/textures/particle/wither_mist_particle3.png b/src/main/resources/assets/treasure2/textures/particle/wither_mist_particle3.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/wither_mist_particle3.png rename to src/main/resources/assets/treasure2/textures/particle/wither_mist_particle3.png diff --git a/src/resources/assets/treasure2/textures/particle/wither_mist_particle4.png b/src/main/resources/assets/treasure2/textures/particle/wither_mist_particle4.png similarity index 100% rename from src/resources/assets/treasure2/textures/particle/wither_mist_particle4.png rename to src/main/resources/assets/treasure2/textures/particle/wither_mist_particle4.png diff --git a/src/resources/decay/treasure2/aged_ruleset.json b/src/main/resources/decay/treasure2/aged_ruleset.json similarity index 100% rename from src/resources/decay/treasure2/aged_ruleset.json rename to src/main/resources/decay/treasure2/aged_ruleset.json diff --git a/src/resources/decay/treasure2/default_ruleset.json b/src/main/resources/decay/treasure2/default_ruleset.json similarity index 100% rename from src/resources/decay/treasure2/default_ruleset.json rename to src/main/resources/decay/treasure2/default_ruleset.json diff --git a/src/resources/decay/treasure2/ruinous_ruleset.json b/src/main/resources/decay/treasure2/ruinous_ruleset.json similarity index 100% rename from src/resources/decay/treasure2/ruinous_ruleset.json rename to src/main/resources/decay/treasure2/ruinous_ruleset.json diff --git a/src/resources/loot_tables/mocreatures/armor/common.json b/src/main/resources/loot_tables/mocreatures/armor/common.json similarity index 100% rename from src/resources/loot_tables/mocreatures/armor/common.json rename to src/main/resources/loot_tables/mocreatures/armor/common.json diff --git a/src/resources/loot_tables/mocreatures/armor/rare.json b/src/main/resources/loot_tables/mocreatures/armor/rare.json similarity index 100% rename from src/resources/loot_tables/mocreatures/armor/rare.json rename to src/main/resources/loot_tables/mocreatures/armor/rare.json diff --git a/src/resources/loot_tables/mocreatures/armor/scarce.json b/src/main/resources/loot_tables/mocreatures/armor/scarce.json similarity index 100% rename from src/resources/loot_tables/mocreatures/armor/scarce.json rename to src/main/resources/loot_tables/mocreatures/armor/scarce.json diff --git a/src/resources/loot_tables/mocreatures/armor/uncommon.json b/src/main/resources/loot_tables/mocreatures/armor/uncommon.json similarity index 100% rename from src/resources/loot_tables/mocreatures/armor/uncommon.json rename to src/main/resources/loot_tables/mocreatures/armor/uncommon.json diff --git a/src/resources/loot_tables/mocreatures/chests/common/armor_tool_chest.json b/src/main/resources/loot_tables/mocreatures/chests/common/armor_tool_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/common/armor_tool_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/common/armor_tool_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/common/food_potion_chest.json b/src/main/resources/loot_tables/mocreatures/chests/common/food_potion_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/common/food_potion_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/common/food_potion_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/common/general_chest.json b/src/main/resources/loot_tables/mocreatures/chests/common/general_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/common/general_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/common/general_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/epic/general_chest.json b/src/main/resources/loot_tables/mocreatures/chests/epic/general_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/epic/general_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/epic/general_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/rare/armor_tool_chest.json b/src/main/resources/loot_tables/mocreatures/chests/rare/armor_tool_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/rare/armor_tool_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/rare/armor_tool_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/rare/food_potion_chest.json b/src/main/resources/loot_tables/mocreatures/chests/rare/food_potion_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/rare/food_potion_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/rare/food_potion_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/rare/general_chest.json b/src/main/resources/loot_tables/mocreatures/chests/rare/general_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/rare/general_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/rare/general_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/scarce/armor_tool_chest.json b/src/main/resources/loot_tables/mocreatures/chests/scarce/armor_tool_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/scarce/armor_tool_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/scarce/armor_tool_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/scarce/food_potion_chest.json b/src/main/resources/loot_tables/mocreatures/chests/scarce/food_potion_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/scarce/food_potion_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/scarce/food_potion_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/scarce/general_chest.json b/src/main/resources/loot_tables/mocreatures/chests/scarce/general_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/scarce/general_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/scarce/general_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/uncommon/armor_tool_chest.json b/src/main/resources/loot_tables/mocreatures/chests/uncommon/armor_tool_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/uncommon/armor_tool_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/uncommon/armor_tool_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/uncommon/food_potion_chest.json b/src/main/resources/loot_tables/mocreatures/chests/uncommon/food_potion_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/uncommon/food_potion_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/uncommon/food_potion_chest.json diff --git a/src/resources/loot_tables/mocreatures/chests/uncommon/general_chest.json b/src/main/resources/loot_tables/mocreatures/chests/uncommon/general_chest.json similarity index 100% rename from src/resources/loot_tables/mocreatures/chests/uncommon/general_chest.json rename to src/main/resources/loot_tables/mocreatures/chests/uncommon/general_chest.json diff --git a/src/resources/loot_tables/mocreatures/food/common.json b/src/main/resources/loot_tables/mocreatures/food/common.json similarity index 100% rename from src/resources/loot_tables/mocreatures/food/common.json rename to src/main/resources/loot_tables/mocreatures/food/common.json diff --git a/src/resources/loot_tables/mocreatures/food/scarce.json b/src/main/resources/loot_tables/mocreatures/food/scarce.json similarity index 100% rename from src/resources/loot_tables/mocreatures/food/scarce.json rename to src/main/resources/loot_tables/mocreatures/food/scarce.json diff --git a/src/resources/loot_tables/mocreatures/food/uncommon.json b/src/main/resources/loot_tables/mocreatures/food/uncommon.json similarity index 100% rename from src/resources/loot_tables/mocreatures/food/uncommon.json rename to src/main/resources/loot_tables/mocreatures/food/uncommon.json diff --git a/src/resources/loot_tables/mocreatures/items/common.json b/src/main/resources/loot_tables/mocreatures/items/common.json similarity index 100% rename from src/resources/loot_tables/mocreatures/items/common.json rename to src/main/resources/loot_tables/mocreatures/items/common.json diff --git a/src/resources/loot_tables/mocreatures/items/epic.json b/src/main/resources/loot_tables/mocreatures/items/epic.json similarity index 100% rename from src/resources/loot_tables/mocreatures/items/epic.json rename to src/main/resources/loot_tables/mocreatures/items/epic.json diff --git a/src/resources/loot_tables/mocreatures/items/rare.json b/src/main/resources/loot_tables/mocreatures/items/rare.json similarity index 100% rename from src/resources/loot_tables/mocreatures/items/rare.json rename to src/main/resources/loot_tables/mocreatures/items/rare.json diff --git a/src/resources/loot_tables/mocreatures/items/scarce.json b/src/main/resources/loot_tables/mocreatures/items/scarce.json similarity index 100% rename from src/resources/loot_tables/mocreatures/items/scarce.json rename to src/main/resources/loot_tables/mocreatures/items/scarce.json diff --git a/src/resources/loot_tables/mocreatures/items/uncommon.json b/src/main/resources/loot_tables/mocreatures/items/uncommon.json similarity index 100% rename from src/resources/loot_tables/mocreatures/items/uncommon.json rename to src/main/resources/loot_tables/mocreatures/items/uncommon.json diff --git a/src/resources/loot_tables/mocreatures/tools/common.json b/src/main/resources/loot_tables/mocreatures/tools/common.json similarity index 100% rename from src/resources/loot_tables/mocreatures/tools/common.json rename to src/main/resources/loot_tables/mocreatures/tools/common.json diff --git a/src/resources/loot_tables/mocreatures/tools/rare.json b/src/main/resources/loot_tables/mocreatures/tools/rare.json similarity index 100% rename from src/resources/loot_tables/mocreatures/tools/rare.json rename to src/main/resources/loot_tables/mocreatures/tools/rare.json diff --git a/src/resources/loot_tables/mocreatures/tools/scarce.json b/src/main/resources/loot_tables/mocreatures/tools/scarce.json similarity index 100% rename from src/resources/loot_tables/mocreatures/tools/scarce.json rename to src/main/resources/loot_tables/mocreatures/tools/scarce.json diff --git a/src/resources/loot_tables/mocreatures/tools/uncommon.json b/src/main/resources/loot_tables/mocreatures/tools/uncommon.json similarity index 100% rename from src/resources/loot_tables/mocreatures/tools/uncommon.json rename to src/main/resources/loot_tables/mocreatures/tools/uncommon.json diff --git a/src/resources/loot_tables/sgs_metals/armor/epic.json b/src/main/resources/loot_tables/sgs_metals/armor/epic.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/armor/epic.json rename to src/main/resources/loot_tables/sgs_metals/armor/epic.json diff --git a/src/resources/loot_tables/sgs_metals/armor/rare.json b/src/main/resources/loot_tables/sgs_metals/armor/rare.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/armor/rare.json rename to src/main/resources/loot_tables/sgs_metals/armor/rare.json diff --git a/src/resources/loot_tables/sgs_metals/armor/scarce.json b/src/main/resources/loot_tables/sgs_metals/armor/scarce.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/armor/scarce.json rename to src/main/resources/loot_tables/sgs_metals/armor/scarce.json diff --git a/src/resources/loot_tables/sgs_metals/chests/epic/general_chest.json b/src/main/resources/loot_tables/sgs_metals/chests/epic/general_chest.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/chests/epic/general_chest.json rename to src/main/resources/loot_tables/sgs_metals/chests/epic/general_chest.json diff --git a/src/resources/loot_tables/sgs_metals/chests/rare/armor_tool_chest.json b/src/main/resources/loot_tables/sgs_metals/chests/rare/armor_tool_chest.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/chests/rare/armor_tool_chest.json rename to src/main/resources/loot_tables/sgs_metals/chests/rare/armor_tool_chest.json diff --git a/src/resources/loot_tables/sgs_metals/chests/rare/general_chest.json b/src/main/resources/loot_tables/sgs_metals/chests/rare/general_chest.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/chests/rare/general_chest.json rename to src/main/resources/loot_tables/sgs_metals/chests/rare/general_chest.json diff --git a/src/resources/loot_tables/sgs_metals/chests/scarce/armor_tool_chest.json b/src/main/resources/loot_tables/sgs_metals/chests/scarce/armor_tool_chest.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/chests/scarce/armor_tool_chest.json rename to src/main/resources/loot_tables/sgs_metals/chests/scarce/armor_tool_chest.json diff --git a/src/resources/loot_tables/sgs_metals/chests/scarce/general_chest.json b/src/main/resources/loot_tables/sgs_metals/chests/scarce/general_chest.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/chests/scarce/general_chest.json rename to src/main/resources/loot_tables/sgs_metals/chests/scarce/general_chest.json diff --git a/src/resources/loot_tables/sgs_metals/items/epic.json b/src/main/resources/loot_tables/sgs_metals/items/epic.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/items/epic.json rename to src/main/resources/loot_tables/sgs_metals/items/epic.json diff --git a/src/resources/loot_tables/sgs_metals/items/rare.json b/src/main/resources/loot_tables/sgs_metals/items/rare.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/items/rare.json rename to src/main/resources/loot_tables/sgs_metals/items/rare.json diff --git a/src/resources/loot_tables/sgs_metals/items/scarce.json b/src/main/resources/loot_tables/sgs_metals/items/scarce.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/items/scarce.json rename to src/main/resources/loot_tables/sgs_metals/items/scarce.json diff --git a/src/resources/loot_tables/sgs_metals/tools/epic.json b/src/main/resources/loot_tables/sgs_metals/tools/epic.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/tools/epic.json rename to src/main/resources/loot_tables/sgs_metals/tools/epic.json diff --git a/src/resources/loot_tables/sgs_metals/tools/rare.json b/src/main/resources/loot_tables/sgs_metals/tools/rare.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/tools/rare.json rename to src/main/resources/loot_tables/sgs_metals/tools/rare.json diff --git a/src/resources/loot_tables/sgs_metals/tools/scarce.json b/src/main/resources/loot_tables/sgs_metals/tools/scarce.json similarity index 100% rename from src/resources/loot_tables/sgs_metals/tools/scarce.json rename to src/main/resources/loot_tables/sgs_metals/tools/scarce.json diff --git a/src/resources/loot_tables/treasure2/armor/common.json b/src/main/resources/loot_tables/treasure2/armor/common.json similarity index 100% rename from src/resources/loot_tables/treasure2/armor/common.json rename to src/main/resources/loot_tables/treasure2/armor/common.json diff --git a/src/resources/loot_tables/treasure2/armor/epic.json b/src/main/resources/loot_tables/treasure2/armor/epic.json similarity index 100% rename from src/resources/loot_tables/treasure2/armor/epic.json rename to src/main/resources/loot_tables/treasure2/armor/epic.json diff --git a/src/resources/loot_tables/treasure2/armor/rare.json b/src/main/resources/loot_tables/treasure2/armor/rare.json similarity index 100% rename from src/resources/loot_tables/treasure2/armor/rare.json rename to src/main/resources/loot_tables/treasure2/armor/rare.json diff --git a/src/resources/loot_tables/treasure2/armor/scarce.json b/src/main/resources/loot_tables/treasure2/armor/scarce.json similarity index 100% rename from src/resources/loot_tables/treasure2/armor/scarce.json rename to src/main/resources/loot_tables/treasure2/armor/scarce.json diff --git a/src/resources/loot_tables/treasure2/armor/uncommon.json b/src/main/resources/loot_tables/treasure2/armor/uncommon.json similarity index 100% rename from src/resources/loot_tables/treasure2/armor/uncommon.json rename to src/main/resources/loot_tables/treasure2/armor/uncommon.json diff --git a/src/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json rename to src/main/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/common/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/common/food_potion_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/common/food_potion_chest.json rename to src/main/resources/loot_tables/treasure2/chests/common/food_potion_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/common/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/common/general_chest.json rename to src/main/resources/loot_tables/treasure2/chests/common/general_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/epic/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/epic/general_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/epic/general_chest.json rename to src/main/resources/loot_tables/treasure2/chests/epic/general_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json rename to src/main/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json rename to src/main/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/rare/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/rare/general_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/rare/general_chest.json rename to src/main/resources/loot_tables/treasure2/chests/rare/general_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json rename to src/main/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json rename to src/main/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/scarce/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/scarce/general_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/scarce/general_chest.json rename to src/main/resources/loot_tables/treasure2/chests/scarce/general_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/special/black_pearl_well.json b/src/main/resources/loot_tables/treasure2/chests/special/black_pearl_well.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/special/black_pearl_well.json rename to src/main/resources/loot_tables/treasure2/chests/special/black_pearl_well.json diff --git a/src/resources/loot_tables/treasure2/chests/special/cauldron_chest.json b/src/main/resources/loot_tables/treasure2/chests/special/cauldron_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/special/cauldron_chest.json rename to src/main/resources/loot_tables/treasure2/chests/special/cauldron_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/special/gold_skull_chest.json b/src/main/resources/loot_tables/treasure2/chests/special/gold_skull_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/special/gold_skull_chest.json rename to src/main/resources/loot_tables/treasure2/chests/special/gold_skull_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/special/skull_chest.json b/src/main/resources/loot_tables/treasure2/chests/special/skull_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/special/skull_chest.json rename to src/main/resources/loot_tables/treasure2/chests/special/skull_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/special/white_pearl_well.json b/src/main/resources/loot_tables/treasure2/chests/special/white_pearl_well.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/special/white_pearl_well.json rename to src/main/resources/loot_tables/treasure2/chests/special/white_pearl_well.json diff --git a/src/resources/loot_tables/treasure2/chests/special/wither_chest.json b/src/main/resources/loot_tables/treasure2/chests/special/wither_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/special/wither_chest.json rename to src/main/resources/loot_tables/treasure2/chests/special/wither_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json rename to src/main/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json rename to src/main/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json diff --git a/src/resources/loot_tables/treasure2/chests/uncommon/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/uncommon/general_chest.json similarity index 100% rename from src/resources/loot_tables/treasure2/chests/uncommon/general_chest.json rename to src/main/resources/loot_tables/treasure2/chests/uncommon/general_chest.json diff --git a/src/resources/loot_tables/treasure2/food/common.json b/src/main/resources/loot_tables/treasure2/food/common.json similarity index 100% rename from src/resources/loot_tables/treasure2/food/common.json rename to src/main/resources/loot_tables/treasure2/food/common.json diff --git a/src/resources/loot_tables/treasure2/food/epic.json b/src/main/resources/loot_tables/treasure2/food/epic.json similarity index 100% rename from src/resources/loot_tables/treasure2/food/epic.json rename to src/main/resources/loot_tables/treasure2/food/epic.json diff --git a/src/resources/loot_tables/treasure2/food/rare.json b/src/main/resources/loot_tables/treasure2/food/rare.json similarity index 100% rename from src/resources/loot_tables/treasure2/food/rare.json rename to src/main/resources/loot_tables/treasure2/food/rare.json diff --git a/src/resources/loot_tables/treasure2/food/scarce.json b/src/main/resources/loot_tables/treasure2/food/scarce.json similarity index 100% rename from src/resources/loot_tables/treasure2/food/scarce.json rename to src/main/resources/loot_tables/treasure2/food/scarce.json diff --git a/src/resources/loot_tables/treasure2/food/uncommon.json b/src/main/resources/loot_tables/treasure2/food/uncommon.json similarity index 100% rename from src/resources/loot_tables/treasure2/food/uncommon.json rename to src/main/resources/loot_tables/treasure2/food/uncommon.json diff --git a/src/resources/loot_tables/treasure2/items/common.json b/src/main/resources/loot_tables/treasure2/items/common.json similarity index 100% rename from src/resources/loot_tables/treasure2/items/common.json rename to src/main/resources/loot_tables/treasure2/items/common.json diff --git a/src/resources/loot_tables/treasure2/items/epic.json b/src/main/resources/loot_tables/treasure2/items/epic.json similarity index 100% rename from src/resources/loot_tables/treasure2/items/epic.json rename to src/main/resources/loot_tables/treasure2/items/epic.json diff --git a/src/resources/loot_tables/treasure2/items/rare.json b/src/main/resources/loot_tables/treasure2/items/rare.json similarity index 100% rename from src/resources/loot_tables/treasure2/items/rare.json rename to src/main/resources/loot_tables/treasure2/items/rare.json diff --git a/src/resources/loot_tables/treasure2/items/scarce.json b/src/main/resources/loot_tables/treasure2/items/scarce.json similarity index 100% rename from src/resources/loot_tables/treasure2/items/scarce.json rename to src/main/resources/loot_tables/treasure2/items/scarce.json diff --git a/src/resources/loot_tables/treasure2/items/uncommon.json b/src/main/resources/loot_tables/treasure2/items/uncommon.json similarity index 100% rename from src/resources/loot_tables/treasure2/items/uncommon.json rename to src/main/resources/loot_tables/treasure2/items/uncommon.json diff --git a/src/resources/loot_tables/treasure2/potions/common.json b/src/main/resources/loot_tables/treasure2/potions/common.json similarity index 100% rename from src/resources/loot_tables/treasure2/potions/common.json rename to src/main/resources/loot_tables/treasure2/potions/common.json diff --git a/src/resources/loot_tables/treasure2/potions/epic.json b/src/main/resources/loot_tables/treasure2/potions/epic.json similarity index 100% rename from src/resources/loot_tables/treasure2/potions/epic.json rename to src/main/resources/loot_tables/treasure2/potions/epic.json diff --git a/src/resources/loot_tables/treasure2/potions/rare.json b/src/main/resources/loot_tables/treasure2/potions/rare.json similarity index 100% rename from src/resources/loot_tables/treasure2/potions/rare.json rename to src/main/resources/loot_tables/treasure2/potions/rare.json diff --git a/src/resources/loot_tables/treasure2/potions/scarce.json b/src/main/resources/loot_tables/treasure2/potions/scarce.json similarity index 100% rename from src/resources/loot_tables/treasure2/potions/scarce.json rename to src/main/resources/loot_tables/treasure2/potions/scarce.json diff --git a/src/resources/loot_tables/treasure2/potions/uncommon.json b/src/main/resources/loot_tables/treasure2/potions/uncommon.json similarity index 100% rename from src/resources/loot_tables/treasure2/potions/uncommon.json rename to src/main/resources/loot_tables/treasure2/potions/uncommon.json diff --git a/src/resources/loot_tables/treasure2/tools/common.json b/src/main/resources/loot_tables/treasure2/tools/common.json similarity index 100% rename from src/resources/loot_tables/treasure2/tools/common.json rename to src/main/resources/loot_tables/treasure2/tools/common.json diff --git a/src/resources/loot_tables/treasure2/tools/epic.json b/src/main/resources/loot_tables/treasure2/tools/epic.json similarity index 100% rename from src/resources/loot_tables/treasure2/tools/epic.json rename to src/main/resources/loot_tables/treasure2/tools/epic.json diff --git a/src/resources/loot_tables/treasure2/tools/rare.json b/src/main/resources/loot_tables/treasure2/tools/rare.json similarity index 100% rename from src/resources/loot_tables/treasure2/tools/rare.json rename to src/main/resources/loot_tables/treasure2/tools/rare.json diff --git a/src/resources/loot_tables/treasure2/tools/scarce.json b/src/main/resources/loot_tables/treasure2/tools/scarce.json similarity index 100% rename from src/resources/loot_tables/treasure2/tools/scarce.json rename to src/main/resources/loot_tables/treasure2/tools/scarce.json diff --git a/src/resources/loot_tables/treasure2/tools/uncommon.json b/src/main/resources/loot_tables/treasure2/tools/uncommon.json similarity index 100% rename from src/resources/loot_tables/treasure2/tools/uncommon.json rename to src/main/resources/loot_tables/treasure2/tools/uncommon.json diff --git a/src/resources/loot_tables/treasure2/treasure/common.json b/src/main/resources/loot_tables/treasure2/treasure/common.json similarity index 100% rename from src/resources/loot_tables/treasure2/treasure/common.json rename to src/main/resources/loot_tables/treasure2/treasure/common.json diff --git a/src/resources/loot_tables/treasure2/treasure/epic.json b/src/main/resources/loot_tables/treasure2/treasure/epic.json similarity index 100% rename from src/resources/loot_tables/treasure2/treasure/epic.json rename to src/main/resources/loot_tables/treasure2/treasure/epic.json diff --git a/src/resources/loot_tables/treasure2/treasure/epic_charms.json b/src/main/resources/loot_tables/treasure2/treasure/epic_charms.json similarity index 100% rename from src/resources/loot_tables/treasure2/treasure/epic_charms.json rename to src/main/resources/loot_tables/treasure2/treasure/epic_charms.json diff --git a/src/resources/loot_tables/treasure2/treasure/rare.json b/src/main/resources/loot_tables/treasure2/treasure/rare.json similarity index 100% rename from src/resources/loot_tables/treasure2/treasure/rare.json rename to src/main/resources/loot_tables/treasure2/treasure/rare.json diff --git a/src/resources/loot_tables/treasure2/treasure/rare_charms.json b/src/main/resources/loot_tables/treasure2/treasure/rare_charms.json similarity index 100% rename from src/resources/loot_tables/treasure2/treasure/rare_charms.json rename to src/main/resources/loot_tables/treasure2/treasure/rare_charms.json diff --git a/src/resources/loot_tables/treasure2/treasure/scarce.json b/src/main/resources/loot_tables/treasure2/treasure/scarce.json similarity index 100% rename from src/resources/loot_tables/treasure2/treasure/scarce.json rename to src/main/resources/loot_tables/treasure2/treasure/scarce.json diff --git a/src/resources/loot_tables/treasure2/treasure/scarce_charms.json b/src/main/resources/loot_tables/treasure2/treasure/scarce_charms.json similarity index 100% rename from src/resources/loot_tables/treasure2/treasure/scarce_charms.json rename to src/main/resources/loot_tables/treasure2/treasure/scarce_charms.json diff --git a/src/resources/loot_tables/treasure2/treasure/uncommon.json b/src/main/resources/loot_tables/treasure2/treasure/uncommon.json similarity index 100% rename from src/resources/loot_tables/treasure2/treasure/uncommon.json rename to src/main/resources/loot_tables/treasure2/treasure/uncommon.json diff --git a/src/resources/loot_tables/treasure2/treasure/uncommon_charms.json b/src/main/resources/loot_tables/treasure2/treasure/uncommon_charms.json similarity index 100% rename from src/resources/loot_tables/treasure2/treasure/uncommon_charms.json rename to src/main/resources/loot_tables/treasure2/treasure/uncommon_charms.json diff --git a/src/resources/mcmod.info b/src/main/resources/mcmod.info similarity index 100% rename from src/resources/mcmod.info rename to src/main/resources/mcmod.info diff --git a/src/resources/meta/treasure2/structures/basic1.json b/src/main/resources/meta/treasure2/structures/basic1.json similarity index 100% rename from src/resources/meta/treasure2/structures/basic1.json rename to src/main/resources/meta/treasure2/structures/basic1.json diff --git a/src/resources/meta/treasure2/structures/basic2.json b/src/main/resources/meta/treasure2/structures/basic2.json similarity index 100% rename from src/resources/meta/treasure2/structures/basic2.json rename to src/main/resources/meta/treasure2/structures/basic2.json diff --git a/src/resources/meta/treasure2/structures/basic3.json b/src/main/resources/meta/treasure2/structures/basic3.json similarity index 100% rename from src/resources/meta/treasure2/structures/basic3.json rename to src/main/resources/meta/treasure2/structures/basic3.json diff --git a/src/resources/meta/treasure2/structures/basic4.json b/src/main/resources/meta/treasure2/structures/basic4.json similarity index 100% rename from src/resources/meta/treasure2/structures/basic4.json rename to src/main/resources/meta/treasure2/structures/basic4.json diff --git a/src/resources/meta/treasure2/structures/basic5.json b/src/main/resources/meta/treasure2/structures/basic5.json similarity index 100% rename from src/resources/meta/treasure2/structures/basic5.json rename to src/main/resources/meta/treasure2/structures/basic5.json diff --git a/src/resources/meta/treasure2/structures/beached-ship1.json b/src/main/resources/meta/treasure2/structures/beached-ship1.json similarity index 100% rename from src/resources/meta/treasure2/structures/beached-ship1.json rename to src/main/resources/meta/treasure2/structures/beached-ship1.json diff --git a/src/resources/meta/treasure2/structures/beached-ship2.json b/src/main/resources/meta/treasure2/structures/beached-ship2.json similarity index 100% rename from src/resources/meta/treasure2/structures/beached-ship2.json rename to src/main/resources/meta/treasure2/structures/beached-ship2.json diff --git a/src/resources/meta/treasure2/structures/beached-ship3.json b/src/main/resources/meta/treasure2/structures/beached-ship3.json similarity index 100% rename from src/resources/meta/treasure2/structures/beached-ship3.json rename to src/main/resources/meta/treasure2/structures/beached-ship3.json diff --git a/src/resources/meta/treasure2/structures/blacksmith1.json b/src/main/resources/meta/treasure2/structures/blacksmith1.json similarity index 100% rename from src/resources/meta/treasure2/structures/blacksmith1.json rename to src/main/resources/meta/treasure2/structures/blacksmith1.json diff --git a/src/resources/meta/treasure2/structures/canopy-wishing-well1.json b/src/main/resources/meta/treasure2/structures/canopy-wishing-well1.json similarity index 100% rename from src/resources/meta/treasure2/structures/canopy-wishing-well1.json rename to src/main/resources/meta/treasure2/structures/canopy-wishing-well1.json diff --git a/src/resources/meta/treasure2/structures/castle1.json b/src/main/resources/meta/treasure2/structures/castle1.json similarity index 100% rename from src/resources/meta/treasure2/structures/castle1.json rename to src/main/resources/meta/treasure2/structures/castle1.json diff --git a/src/resources/meta/treasure2/structures/cave1.json b/src/main/resources/meta/treasure2/structures/cave1.json similarity index 100% rename from src/resources/meta/treasure2/structures/cave1.json rename to src/main/resources/meta/treasure2/structures/cave1.json diff --git a/src/resources/meta/treasure2/structures/cave2.json b/src/main/resources/meta/treasure2/structures/cave2.json similarity index 100% rename from src/resources/meta/treasure2/structures/cave2.json rename to src/main/resources/meta/treasure2/structures/cave2.json diff --git a/src/resources/meta/treasure2/structures/church1.json b/src/main/resources/meta/treasure2/structures/church1.json similarity index 100% rename from src/resources/meta/treasure2/structures/church1.json rename to src/main/resources/meta/treasure2/structures/church1.json diff --git a/src/resources/meta/treasure2/structures/cobb1.json b/src/main/resources/meta/treasure2/structures/cobb1.json similarity index 100% rename from src/resources/meta/treasure2/structures/cobb1.json rename to src/main/resources/meta/treasure2/structures/cobb1.json diff --git a/src/resources/meta/treasure2/structures/crypt1.json b/src/main/resources/meta/treasure2/structures/crypt1.json similarity index 100% rename from src/resources/meta/treasure2/structures/crypt1.json rename to src/main/resources/meta/treasure2/structures/crypt1.json diff --git a/src/resources/meta/treasure2/structures/crypt2.json b/src/main/resources/meta/treasure2/structures/crypt2.json similarity index 100% rename from src/resources/meta/treasure2/structures/crypt2.json rename to src/main/resources/meta/treasure2/structures/crypt2.json diff --git a/src/resources/meta/treasure2/structures/crypt3.json b/src/main/resources/meta/treasure2/structures/crypt3.json similarity index 100% rename from src/resources/meta/treasure2/structures/crypt3.json rename to src/main/resources/meta/treasure2/structures/crypt3.json diff --git a/src/resources/meta/treasure2/structures/desert-tower2.json b/src/main/resources/meta/treasure2/structures/desert-tower2.json similarity index 100% rename from src/resources/meta/treasure2/structures/desert-tower2.json rename to src/main/resources/meta/treasure2/structures/desert-tower2.json diff --git a/src/resources/meta/treasure2/structures/desert-wishing-well1.json b/src/main/resources/meta/treasure2/structures/desert-wishing-well1.json similarity index 100% rename from src/resources/meta/treasure2/structures/desert-wishing-well1.json rename to src/main/resources/meta/treasure2/structures/desert-wishing-well1.json diff --git a/src/resources/meta/treasure2/structures/desert-wishing-well2.json b/src/main/resources/meta/treasure2/structures/desert-wishing-well2.json similarity index 100% rename from src/resources/meta/treasure2/structures/desert-wishing-well2.json rename to src/main/resources/meta/treasure2/structures/desert-wishing-well2.json diff --git a/src/resources/meta/treasure2/structures/dingy1.json b/src/main/resources/meta/treasure2/structures/dingy1.json similarity index 100% rename from src/resources/meta/treasure2/structures/dingy1.json rename to src/main/resources/meta/treasure2/structures/dingy1.json diff --git a/src/resources/meta/treasure2/structures/fortress1.json b/src/main/resources/meta/treasure2/structures/fortress1.json similarity index 100% rename from src/resources/meta/treasure2/structures/fortress1.json rename to src/main/resources/meta/treasure2/structures/fortress1.json diff --git a/src/resources/meta/treasure2/structures/house1.json b/src/main/resources/meta/treasure2/structures/house1.json similarity index 100% rename from src/resources/meta/treasure2/structures/house1.json rename to src/main/resources/meta/treasure2/structures/house1.json diff --git a/src/resources/meta/treasure2/structures/ionic1.json b/src/main/resources/meta/treasure2/structures/ionic1.json similarity index 100% rename from src/resources/meta/treasure2/structures/ionic1.json rename to src/main/resources/meta/treasure2/structures/ionic1.json diff --git a/src/resources/meta/treasure2/structures/iron-chamber1.json b/src/main/resources/meta/treasure2/structures/iron-chamber1.json similarity index 100% rename from src/resources/meta/treasure2/structures/iron-chamber1.json rename to src/main/resources/meta/treasure2/structures/iron-chamber1.json diff --git a/src/resources/meta/treasure2/structures/iron-chamber2.json b/src/main/resources/meta/treasure2/structures/iron-chamber2.json similarity index 100% rename from src/resources/meta/treasure2/structures/iron-chamber2.json rename to src/main/resources/meta/treasure2/structures/iron-chamber2.json diff --git a/src/resources/meta/treasure2/structures/large-tower1.json b/src/main/resources/meta/treasure2/structures/large-tower1.json similarity index 100% rename from src/resources/meta/treasure2/structures/large-tower1.json rename to src/main/resources/meta/treasure2/structures/large-tower1.json diff --git a/src/resources/meta/treasure2/structures/mine1.json b/src/main/resources/meta/treasure2/structures/mine1.json similarity index 100% rename from src/resources/meta/treasure2/structures/mine1.json rename to src/main/resources/meta/treasure2/structures/mine1.json diff --git a/src/resources/meta/treasure2/structures/obsidian-chamber1.json b/src/main/resources/meta/treasure2/structures/obsidian-chamber1.json similarity index 100% rename from src/resources/meta/treasure2/structures/obsidian-chamber1.json rename to src/main/resources/meta/treasure2/structures/obsidian-chamber1.json diff --git a/src/resources/meta/treasure2/structures/pirate-chamber1.json b/src/main/resources/meta/treasure2/structures/pirate-chamber1.json similarity index 100% rename from src/resources/meta/treasure2/structures/pirate-chamber1.json rename to src/main/resources/meta/treasure2/structures/pirate-chamber1.json diff --git a/src/resources/meta/treasure2/structures/simple-well1.json b/src/main/resources/meta/treasure2/structures/simple-well1.json similarity index 100% rename from src/resources/meta/treasure2/structures/simple-well1.json rename to src/main/resources/meta/treasure2/structures/simple-well1.json diff --git a/src/resources/meta/treasure2/structures/sunken-ship1.json b/src/main/resources/meta/treasure2/structures/sunken-ship1.json similarity index 100% rename from src/resources/meta/treasure2/structures/sunken-ship1.json rename to src/main/resources/meta/treasure2/structures/sunken-ship1.json diff --git a/src/resources/meta/treasure2/structures/sunken-ship2.json b/src/main/resources/meta/treasure2/structures/sunken-ship2.json similarity index 100% rename from src/resources/meta/treasure2/structures/sunken-ship2.json rename to src/main/resources/meta/treasure2/structures/sunken-ship2.json diff --git a/src/resources/meta/treasure2/structures/sunken-ship3.json b/src/main/resources/meta/treasure2/structures/sunken-ship3.json similarity index 100% rename from src/resources/meta/treasure2/structures/sunken-ship3.json rename to src/main/resources/meta/treasure2/structures/sunken-ship3.json diff --git a/src/resources/meta/treasure2/structures/tower1.json b/src/main/resources/meta/treasure2/structures/tower1.json similarity index 100% rename from src/resources/meta/treasure2/structures/tower1.json rename to src/main/resources/meta/treasure2/structures/tower1.json diff --git a/src/resources/meta/treasure2/structures/tower2.json b/src/main/resources/meta/treasure2/structures/tower2.json similarity index 100% rename from src/resources/meta/treasure2/structures/tower2.json rename to src/main/resources/meta/treasure2/structures/tower2.json diff --git a/src/resources/meta/treasure2/structures/tower3.json b/src/main/resources/meta/treasure2/structures/tower3.json similarity index 100% rename from src/resources/meta/treasure2/structures/tower3.json rename to src/main/resources/meta/treasure2/structures/tower3.json diff --git a/src/resources/meta/treasure2/structures/tower4.json b/src/main/resources/meta/treasure2/structures/tower4.json similarity index 100% rename from src/resources/meta/treasure2/structures/tower4.json rename to src/main/resources/meta/treasure2/structures/tower4.json diff --git a/src/resources/meta/treasure2/structures/tower5.json b/src/main/resources/meta/treasure2/structures/tower5.json similarity index 100% rename from src/resources/meta/treasure2/structures/tower5.json rename to src/main/resources/meta/treasure2/structures/tower5.json diff --git a/src/resources/meta/treasure2/structures/underwater-ruin1.json b/src/main/resources/meta/treasure2/structures/underwater-ruin1.json similarity index 100% rename from src/resources/meta/treasure2/structures/underwater-ruin1.json rename to src/main/resources/meta/treasure2/structures/underwater-ruin1.json diff --git a/src/resources/meta/treasure2/structures/underwater-ruins2.json b/src/main/resources/meta/treasure2/structures/underwater-ruins2.json similarity index 100% rename from src/resources/meta/treasure2/structures/underwater-ruins2.json rename to src/main/resources/meta/treasure2/structures/underwater-ruins2.json diff --git a/src/resources/meta/treasure2/structures/underwater-ruins3.json b/src/main/resources/meta/treasure2/structures/underwater-ruins3.json similarity index 100% rename from src/resources/meta/treasure2/structures/underwater-ruins3.json rename to src/main/resources/meta/treasure2/structures/underwater-ruins3.json diff --git a/src/resources/meta/treasure2/structures/wither-chamber1.json b/src/main/resources/meta/treasure2/structures/wither-chamber1.json similarity index 100% rename from src/resources/meta/treasure2/structures/wither-chamber1.json rename to src/main/resources/meta/treasure2/structures/wither-chamber1.json diff --git a/src/resources/meta/treasure2/structures/wood-draw-wishing-well1.json b/src/main/resources/meta/treasure2/structures/wood-draw-wishing-well1.json similarity index 100% rename from src/resources/meta/treasure2/structures/wood-draw-wishing-well1.json rename to src/main/resources/meta/treasure2/structures/wood-draw-wishing-well1.json diff --git a/src/resources/structures/treasure2/submerged/dingy1.nbt b/src/main/resources/structures/treasure2/submerged/dingy1.nbt similarity index 100% rename from src/resources/structures/treasure2/submerged/dingy1.nbt rename to src/main/resources/structures/treasure2/submerged/dingy1.nbt diff --git a/src/resources/structures/treasure2/submerged/sunken-ship1.nbt b/src/main/resources/structures/treasure2/submerged/sunken-ship1.nbt similarity index 100% rename from src/resources/structures/treasure2/submerged/sunken-ship1.nbt rename to src/main/resources/structures/treasure2/submerged/sunken-ship1.nbt diff --git a/src/resources/structures/treasure2/submerged/sunken-ship2.nbt b/src/main/resources/structures/treasure2/submerged/sunken-ship2.nbt similarity index 100% rename from src/resources/structures/treasure2/submerged/sunken-ship2.nbt rename to src/main/resources/structures/treasure2/submerged/sunken-ship2.nbt diff --git a/src/resources/structures/treasure2/submerged/sunken-ship3.nbt b/src/main/resources/structures/treasure2/submerged/sunken-ship3.nbt similarity index 100% rename from src/resources/structures/treasure2/submerged/sunken-ship3.nbt rename to src/main/resources/structures/treasure2/submerged/sunken-ship3.nbt diff --git a/src/resources/structures/treasure2/submerged/underwater-ruin1.nbt b/src/main/resources/structures/treasure2/submerged/underwater-ruin1.nbt similarity index 100% rename from src/resources/structures/treasure2/submerged/underwater-ruin1.nbt rename to src/main/resources/structures/treasure2/submerged/underwater-ruin1.nbt diff --git a/src/resources/structures/treasure2/submerged/underwater-ruins2.nbt b/src/main/resources/structures/treasure2/submerged/underwater-ruins2.nbt similarity index 100% rename from src/resources/structures/treasure2/submerged/underwater-ruins2.nbt rename to src/main/resources/structures/treasure2/submerged/underwater-ruins2.nbt diff --git a/src/resources/structures/treasure2/submerged/underwater-ruins3.nbt b/src/main/resources/structures/treasure2/submerged/underwater-ruins3.nbt similarity index 100% rename from src/resources/structures/treasure2/submerged/underwater-ruins3.nbt rename to src/main/resources/structures/treasure2/submerged/underwater-ruins3.nbt diff --git a/src/resources/structures/treasure2/subterranean/basic1.nbt b/src/main/resources/structures/treasure2/subterranean/basic1.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/basic1.nbt rename to src/main/resources/structures/treasure2/subterranean/basic1.nbt diff --git a/src/resources/structures/treasure2/subterranean/basic2.nbt b/src/main/resources/structures/treasure2/subterranean/basic2.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/basic2.nbt rename to src/main/resources/structures/treasure2/subterranean/basic2.nbt diff --git a/src/resources/structures/treasure2/subterranean/basic3.nbt b/src/main/resources/structures/treasure2/subterranean/basic3.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/basic3.nbt rename to src/main/resources/structures/treasure2/subterranean/basic3.nbt diff --git a/src/resources/structures/treasure2/subterranean/basic4.nbt b/src/main/resources/structures/treasure2/subterranean/basic4.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/basic4.nbt rename to src/main/resources/structures/treasure2/subterranean/basic4.nbt diff --git a/src/resources/structures/treasure2/subterranean/basic5.nbt b/src/main/resources/structures/treasure2/subterranean/basic5.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/basic5.nbt rename to src/main/resources/structures/treasure2/subterranean/basic5.nbt diff --git a/src/resources/structures/treasure2/subterranean/cave1.nbt b/src/main/resources/structures/treasure2/subterranean/cave1.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/cave1.nbt rename to src/main/resources/structures/treasure2/subterranean/cave1.nbt diff --git a/src/resources/structures/treasure2/subterranean/cave2.nbt b/src/main/resources/structures/treasure2/subterranean/cave2.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/cave2.nbt rename to src/main/resources/structures/treasure2/subterranean/cave2.nbt diff --git a/src/resources/structures/treasure2/subterranean/cobb1.nbt b/src/main/resources/structures/treasure2/subterranean/cobb1.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/cobb1.nbt rename to src/main/resources/structures/treasure2/subterranean/cobb1.nbt diff --git a/src/resources/structures/treasure2/subterranean/crypt1.nbt b/src/main/resources/structures/treasure2/subterranean/crypt1.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/crypt1.nbt rename to src/main/resources/structures/treasure2/subterranean/crypt1.nbt diff --git a/src/resources/structures/treasure2/subterranean/ionic1.nbt b/src/main/resources/structures/treasure2/subterranean/ionic1.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/ionic1.nbt rename to src/main/resources/structures/treasure2/subterranean/ionic1.nbt diff --git a/src/resources/structures/treasure2/subterranean/iron-chamber1.nbt b/src/main/resources/structures/treasure2/subterranean/iron-chamber1.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/iron-chamber1.nbt rename to src/main/resources/structures/treasure2/subterranean/iron-chamber1.nbt diff --git a/src/resources/structures/treasure2/subterranean/iron-chamber2.nbt b/src/main/resources/structures/treasure2/subterranean/iron-chamber2.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/iron-chamber2.nbt rename to src/main/resources/structures/treasure2/subterranean/iron-chamber2.nbt diff --git a/src/resources/structures/treasure2/subterranean/mine1.nbt b/src/main/resources/structures/treasure2/subterranean/mine1.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/mine1.nbt rename to src/main/resources/structures/treasure2/subterranean/mine1.nbt diff --git a/src/resources/structures/treasure2/subterranean/obsidian-chamber1.nbt b/src/main/resources/structures/treasure2/subterranean/obsidian-chamber1.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/obsidian-chamber1.nbt rename to src/main/resources/structures/treasure2/subterranean/obsidian-chamber1.nbt diff --git a/src/resources/structures/treasure2/subterranean/pirate-chamber1.nbt b/src/main/resources/structures/treasure2/subterranean/pirate-chamber1.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/pirate-chamber1.nbt rename to src/main/resources/structures/treasure2/subterranean/pirate-chamber1.nbt diff --git a/src/resources/structures/treasure2/subterranean/wither-chamber1.nbt b/src/main/resources/structures/treasure2/subterranean/wither-chamber1.nbt similarity index 100% rename from src/resources/structures/treasure2/subterranean/wither-chamber1.nbt rename to src/main/resources/structures/treasure2/subterranean/wither-chamber1.nbt diff --git a/src/resources/structures/treasure2/surface/beached-ship1.nbt b/src/main/resources/structures/treasure2/surface/beached-ship1.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/beached-ship1.nbt rename to src/main/resources/structures/treasure2/surface/beached-ship1.nbt diff --git a/src/resources/structures/treasure2/surface/beached-ship2.nbt b/src/main/resources/structures/treasure2/surface/beached-ship2.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/beached-ship2.nbt rename to src/main/resources/structures/treasure2/surface/beached-ship2.nbt diff --git a/src/resources/structures/treasure2/surface/beached-ship3.nbt b/src/main/resources/structures/treasure2/surface/beached-ship3.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/beached-ship3.nbt rename to src/main/resources/structures/treasure2/surface/beached-ship3.nbt diff --git a/src/resources/structures/treasure2/surface/blacksmith1.nbt b/src/main/resources/structures/treasure2/surface/blacksmith1.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/blacksmith1.nbt rename to src/main/resources/structures/treasure2/surface/blacksmith1.nbt diff --git a/src/resources/structures/treasure2/surface/castle1.nbt b/src/main/resources/structures/treasure2/surface/castle1.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/castle1.nbt rename to src/main/resources/structures/treasure2/surface/castle1.nbt diff --git a/src/resources/structures/treasure2/surface/church1.nbt b/src/main/resources/structures/treasure2/surface/church1.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/church1.nbt rename to src/main/resources/structures/treasure2/surface/church1.nbt diff --git a/src/resources/structures/treasure2/surface/crypt2.nbt b/src/main/resources/structures/treasure2/surface/crypt2.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/crypt2.nbt rename to src/main/resources/structures/treasure2/surface/crypt2.nbt diff --git a/src/resources/structures/treasure2/surface/crypt3.nbt b/src/main/resources/structures/treasure2/surface/crypt3.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/crypt3.nbt rename to src/main/resources/structures/treasure2/surface/crypt3.nbt diff --git a/src/resources/structures/treasure2/surface/desert-tower2.nbt b/src/main/resources/structures/treasure2/surface/desert-tower2.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/desert-tower2.nbt rename to src/main/resources/structures/treasure2/surface/desert-tower2.nbt diff --git a/src/resources/structures/treasure2/surface/fortress1.nbt b/src/main/resources/structures/treasure2/surface/fortress1.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/fortress1.nbt rename to src/main/resources/structures/treasure2/surface/fortress1.nbt diff --git a/src/resources/structures/treasure2/surface/house1.nbt b/src/main/resources/structures/treasure2/surface/house1.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/house1.nbt rename to src/main/resources/structures/treasure2/surface/house1.nbt diff --git a/src/resources/structures/treasure2/surface/large-tower1.nbt b/src/main/resources/structures/treasure2/surface/large-tower1.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/large-tower1.nbt rename to src/main/resources/structures/treasure2/surface/large-tower1.nbt diff --git a/src/resources/structures/treasure2/surface/tower1.nbt b/src/main/resources/structures/treasure2/surface/tower1.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/tower1.nbt rename to src/main/resources/structures/treasure2/surface/tower1.nbt diff --git a/src/resources/structures/treasure2/surface/tower2.nbt b/src/main/resources/structures/treasure2/surface/tower2.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/tower2.nbt rename to src/main/resources/structures/treasure2/surface/tower2.nbt diff --git a/src/resources/structures/treasure2/surface/tower3.nbt b/src/main/resources/structures/treasure2/surface/tower3.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/tower3.nbt rename to src/main/resources/structures/treasure2/surface/tower3.nbt diff --git a/src/resources/structures/treasure2/surface/tower4.nbt b/src/main/resources/structures/treasure2/surface/tower4.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/tower4.nbt rename to src/main/resources/structures/treasure2/surface/tower4.nbt diff --git a/src/resources/structures/treasure2/surface/tower5.nbt b/src/main/resources/structures/treasure2/surface/tower5.nbt similarity index 100% rename from src/resources/structures/treasure2/surface/tower5.nbt rename to src/main/resources/structures/treasure2/surface/tower5.nbt diff --git a/src/resources/structures/treasure2/wells/canopy-wishing-well1.nbt b/src/main/resources/structures/treasure2/wells/canopy-wishing-well1.nbt similarity index 100% rename from src/resources/structures/treasure2/wells/canopy-wishing-well1.nbt rename to src/main/resources/structures/treasure2/wells/canopy-wishing-well1.nbt diff --git a/src/resources/structures/treasure2/wells/desert-wishing-well1.nbt b/src/main/resources/structures/treasure2/wells/desert-wishing-well1.nbt similarity index 100% rename from src/resources/structures/treasure2/wells/desert-wishing-well1.nbt rename to src/main/resources/structures/treasure2/wells/desert-wishing-well1.nbt diff --git a/src/resources/structures/treasure2/wells/desert-wishing-well2.nbt b/src/main/resources/structures/treasure2/wells/desert-wishing-well2.nbt similarity index 100% rename from src/resources/structures/treasure2/wells/desert-wishing-well2.nbt rename to src/main/resources/structures/treasure2/wells/desert-wishing-well2.nbt diff --git a/src/resources/structures/treasure2/wells/simple-well1.nbt b/src/main/resources/structures/treasure2/wells/simple-well1.nbt similarity index 100% rename from src/resources/structures/treasure2/wells/simple-well1.nbt rename to src/main/resources/structures/treasure2/wells/simple-well1.nbt diff --git a/src/resources/structures/treasure2/wells/wood-draw-wishing-well1.nbt b/src/main/resources/structures/treasure2/wells/wood-draw-wishing-well1.nbt similarity index 100% rename from src/resources/structures/treasure2/wells/wood-draw-wishing-well1.nbt rename to src/main/resources/structures/treasure2/wells/wood-draw-wishing-well1.nbt diff --git a/src/resources/treasure2-curseforge-logo.png b/src/main/resources/treasure2-curseforge-logo.png similarity index 100% rename from src/resources/treasure2-curseforge-logo.png rename to src/main/resources/treasure2-curseforge-logo.png diff --git a/src/resources/treasure2-github-logo.png b/src/main/resources/treasure2-github-logo.png similarity index 100% rename from src/resources/treasure2-github-logo.png rename to src/main/resources/treasure2-github-logo.png From f24c0509300608310f8c597d91fb1616abaada36 Mon Sep 17 00:00:00 2001 From: gottsch Date: Mon, 2 Nov 2020 07:45:26 -0500 Subject: [PATCH 02/20] refactor build.gradle and gradle.properties --- build.gradle | 4 ++-- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 45ad7f70a..da085b1d3 100644 --- a/build.gradle +++ b/build.gradle @@ -50,10 +50,10 @@ minecraft { //Optional: change the project structure sourceSets.main{ java{ - srcDirs 'src' //, 'test' //set the source folder as the /src subfolder + srcDirs 'src/main/java' //, 'test' //set the source folder as the /src subfolder } resources{ - srcDirs 'src/resources' //set the resources folder as the /resources subfolder + srcDirs 'src/main/resources' //set the resources folder as the /resources subfolder } } diff --git a/gradle.properties b/gradle.properties index 7a8b259da..0a760bc0a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ package_group=someguyssoftware.treasure2 # user alpha, beta, or v (for version) mod_version_type=v -mod_version=1.13.1 +mod_version=1.13.2 #versions mc_version=1.12.2 From 13fa3bf179048691400bf15ed9ba90d60c615408 Mon Sep 17 00:00:00 2001 From: gottsch <17928819+gottsch@users.noreply.github.com> Date: Mon, 23 Nov 2020 19:30:50 -0500 Subject: [PATCH 03/20] Add files via upload --- models/CardboardBoxEntity.bbmodel | 1 + 1 file changed, 1 insertion(+) create mode 100644 models/CardboardBoxEntity.bbmodel diff --git a/models/CardboardBoxEntity.bbmodel b/models/CardboardBoxEntity.bbmodel new file mode 100644 index 000000000..d85a710a0 --- /dev/null +++ b/models/CardboardBoxEntity.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.6","creation_time":1606177658,"model_format":"modded_entity","box_uv":true},"name":"CardboardBoxEntity","geometry_name":"","modded_entity_version":"1.12","visible_box":[1,1,0],"layered_textures":true,"resolution":{"width":128,"height":128},"elements":[{"name":"cube","from":[-7,0,-7],"to":[7,14,7],"autouv":0,"color":6,"locked":false,"origin":[-7,0,-7],"faces":{"north":{"uv":[14,14,28,28],"texture":0},"east":{"uv":[0,14,14,28],"texture":0},"south":{"uv":[42,14,56,28],"texture":0},"west":{"uv":[28,14,42,28],"texture":0},"up":{"uv":[28,14,14,0],"texture":0},"down":{"uv":[42,0,28,14],"texture":0}},"uuid":"7cab9805-ecf6-ce70-6b82-3c2b0664b4fa"},{"name":"rightFlap","from":[-7,14,-7],"to":[0,15,7],"autouv":0,"color":1,"locked":false,"origin":[-7,14,0],"uv_offset":[28,29],"faces":{"north":{"uv":[42,43,49,44],"texture":0},"east":{"uv":[28,43,42,44],"texture":0},"south":{"uv":[63,43,70,44],"texture":0},"west":{"uv":[49,43,63,44],"texture":0},"up":{"uv":[49,43,42,29],"texture":0},"down":{"uv":[56,29,49,43],"texture":0}},"uuid":"d3376753-63c4-9bef-f50f-5de951b8f3fa"},{"name":"leftFlap","from":[0,14,-7],"to":[7,15,7],"autouv":0,"color":1,"locked":false,"origin":[8,14,0],"uv_offset":[0,28],"faces":{"north":{"uv":[14,42,21,43],"texture":0},"east":{"uv":[0,42,14,43],"texture":0},"south":{"uv":[35,42,42,43],"texture":0},"west":{"uv":[21,42,35,43],"texture":0},"up":{"uv":[21,42,14,28],"texture":0},"down":{"uv":[28,28,21,42],"texture":0}},"uuid":"cbcd12de-2c41-46d7-0150-c6ea084239fa"},{"name":"southFlap","from":[-7,13.999,0.9989999999999997],"to":[7,14.999,6.999],"autouv":0,"color":2,"locked":false,"origin":[0,14,7],"uv_offset":[42,7],"faces":{"north":{"uv":[48,13,62,14],"texture":0},"east":{"uv":[42,13,48,14],"texture":0},"south":{"uv":[68,13,82,14],"texture":0},"west":{"uv":[62,13,68,14],"texture":0},"up":{"uv":[62,13,48,7],"texture":0},"down":{"uv":[76,7,62,13],"texture":0}},"uuid":"3d03b67a-f700-64fc-0ea2-4786d167e0d4"},{"name":"northFlap","from":[-7,13.999000000000002,-6.999],"to":[7,14.999000000000002,-0.9990000000000006],"autouv":0,"color":2,"locked":false,"origin":[-7,14,-7],"uv_offset":[42,0],"faces":{"north":{"uv":[48,6,62,7],"texture":0},"east":{"uv":[42,6,48,7],"texture":0},"south":{"uv":[68,6,82,7],"texture":0},"west":{"uv":[62,6,68,7],"texture":0},"up":{"uv":[62,6,48,0],"texture":0},"down":{"uv":[76,0,62,6],"texture":0}},"uuid":"073f75b2-c62c-9ebe-41e4-2a500c292863"}],"outliner":["7cab9805-ecf6-ce70-6b82-3c2b0664b4fa","d3376753-63c4-9bef-f50f-5de951b8f3fa","cbcd12de-2c41-46d7-0150-c6ea084239fa","3d03b67a-f700-64fc-0ea2-4786d167e0d4","073f75b2-c62c-9ebe-41e4-2a500c292863"],"textures":[{"path":"/Users/jzmjsr/Documents/Blockbench/cardboard-box.png","name":"cardboard-box.png","folder":"Blockbench","namespace":"","id":"0","particle":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"5b7d5a41-7c1a-f6ed-7fcf-b8af457c0d2b","source":"data:image/png;base64,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"}]} \ No newline at end of file From b5d60d9d6e3e32eb209d849fee9a1f91c0970d11 Mon Sep 17 00:00:00 2001 From: gottsch Date: Sun, 29 Nov 2020 16:24:19 -0500 Subject: [PATCH 04/20] re-arrange source --- src/{ => main/java}/com/someguyssoftware/treasure2/Treasure.java | 0 .../com/someguyssoftware/treasure2/biome/TreasureBiomeHelper.java | 0 .../com/someguyssoftware/treasure2/block/AbstractChestBlock.java | 0 .../someguyssoftware/treasure2/block/AbstractPaintingBlock.java | 0 .../com/someguyssoftware/treasure2/block/BlackstoneBlock.java | 0 .../someguyssoftware/treasure2/block/DesertWishingWellBlock.java | 0 .../com/someguyssoftware/treasure2/block/FallingGrassBlock.java | 0 .../com/someguyssoftware/treasure2/block/FallingRedSandBlock.java | 0 .../com/someguyssoftware/treasure2/block/FallingSandBlock.java | 0 .../java}/com/someguyssoftware/treasure2/block/FogBlock.java | 0 .../com/someguyssoftware/treasure2/block/GravestoneBlock.java | 0 .../someguyssoftware/treasure2/block/GravestoneSpawnerBlock.java | 0 .../java}/com/someguyssoftware/treasure2/block/IFogSupport.java | 0 .../java}/com/someguyssoftware/treasure2/block/IMimicBlock.java | 0 .../java}/com/someguyssoftware/treasure2/block/IMistSupport.java | 0 .../com/someguyssoftware/treasure2/block/ITreasureBlock.java | 0 .../com/someguyssoftware/treasure2/block/ITreasureChestProxy.java | 0 .../com/someguyssoftware/treasure2/block/IWishingWellBlock.java | 0 .../com/someguyssoftware/treasure2/block/MimicChestBlock.java | 0 .../java}/com/someguyssoftware/treasure2/block/ModLogBlock.java | 0 .../java}/com/someguyssoftware/treasure2/block/OreBlock.java | 0 .../com/someguyssoftware/treasure2/block/Painting1x1Block.java | 0 .../com/someguyssoftware/treasure2/block/PoisonFogBlock.java | 0 .../com/someguyssoftware/treasure2/block/ProximityBlock.java | 0 .../java}/com/someguyssoftware/treasure2/block/SkeletonBlock.java | 0 .../com/someguyssoftware/treasure2/block/SkullAndBonesBlock.java | 0 .../com/someguyssoftware/treasure2/block/SpanishMossBlock.java | 0 .../com/someguyssoftware/treasure2/block/TreasureBlocks.java | 0 .../com/someguyssoftware/treasure2/block/TreasureChestBlock.java | 0 .../com/someguyssoftware/treasure2/block/WishingWellBlock.java | 0 .../com/someguyssoftware/treasure2/block/WitherBranchBlock.java | 0 .../someguyssoftware/treasure2/block/WitherBrokenLogBlock.java | 0 .../com/someguyssoftware/treasure2/block/WitherChestBlock.java | 0 .../com/someguyssoftware/treasure2/block/WitherChestTopBlock.java | 0 .../com/someguyssoftware/treasure2/block/WitherFogBlock.java | 0 .../com/someguyssoftware/treasure2/block/WitherLogBlock.java | 0 .../com/someguyssoftware/treasure2/block/WitherLogSoulBlock.java | 0 .../com/someguyssoftware/treasure2/block/WitherPlanksBlock.java | 0 .../com/someguyssoftware/treasure2/block/WitherRootBlock.java | 0 .../someguyssoftware/treasure2/capability/CharmCapability.java | 0 .../treasure2/capability/CharmCapabilityProvider.java | 0 .../com/someguyssoftware/treasure2/capability/CharmStorage.java | 0 .../treasure2/capability/EffectiveMaxDamageCapability.java | 0 .../capability/EffectiveMaxDamageCapabilityProvider.java | 0 .../treasure2/capability/EffectiveMaxDamageStorage.java | 0 .../someguyssoftware/treasure2/capability/ICharmCapability.java | 0 .../treasure2/capability/IEffectiveMaxDamageCapability.java | 0 .../someguyssoftware/treasure2/capability/IKeyRingCapability.java | 0 .../someguyssoftware/treasure2/capability/KeyRingCapability.java | 0 .../treasure2/capability/KeyRingCapabilityProvider.java | 0 .../com/someguyssoftware/treasure2/capability/KeyRingStorage.java | 0 .../treasure2/capability/PouchCapabilityProvider.java | 0 .../java}/com/someguyssoftware/treasure2/chest/ChestInfo.java | 0 .../java}/com/someguyssoftware/treasure2/chest/ILockSlot.java | 0 .../java}/com/someguyssoftware/treasure2/chest/LockSlot.java | 0 .../com/someguyssoftware/treasure2/chest/TreasureChestType.java | 0 .../com/someguyssoftware/treasure2/chest/TreasureChestTypes.java | 0 .../com/someguyssoftware/treasure2/client/gui/GuiHandler.java | 0 .../treasure2/client/gui/inventory/ArmoireChestGui.java | 0 .../treasure2/client/gui/inventory/CompressorChestGui.java | 0 .../treasure2/client/gui/inventory/KeyRingGui.java | 0 .../treasure2/client/gui/inventory/MolluscChestGui.java | 0 .../someguyssoftware/treasure2/client/gui/inventory/PouchGui.java | 0 .../treasure2/client/gui/inventory/SkullChestGui.java | 0 .../treasure2/client/gui/inventory/StandardChestGui.java | 0 .../treasure2/client/gui/inventory/StrongboxChestGui.java | 0 .../treasure2/client/gui/inventory/WitherChestGui.java | 0 .../someguyssoftware/treasure2/client/model/BandedChestModel.java | 0 .../treasure2/client/model/CauldronChestModel.java | 0 .../someguyssoftware/treasure2/client/model/ClamChestModel.java | 0 .../treasure2/client/model/CompressorChestModel.java | 0 .../someguyssoftware/treasure2/client/model/CrateChestModel.java | 0 .../treasure2/client/model/DreadPirateChestModel.java | 0 .../treasure2/client/model/ITreasureChestModel.java | 0 .../com/someguyssoftware/treasure2/client/model/MimicModel.java | 0 .../someguyssoftware/treasure2/client/model/OysterChestModel.java | 0 .../com/someguyssoftware/treasure2/client/model/SafeModel.java | 0 .../someguyssoftware/treasure2/client/model/SkullChestModel.java | 0 .../someguyssoftware/treasure2/client/model/SpiderChestModel.java | 0 .../treasure2/client/model/StandardChestModel.java | 0 .../someguyssoftware/treasure2/client/model/StrongboxModel.java | 0 .../someguyssoftware/treasure2/client/model/VikingChestModel.java | 0 .../someguyssoftware/treasure2/client/model/WitherChestModel.java | 0 .../treasure2/client/render/entity/BoundSoulRenderer.java | 0 .../treasure2/client/render/entity/MimicEntityRenderer.java | 0 .../client/render/tileentity/CauldronChestTileEntityRenderer.java | 0 .../render/tileentity/CompressorChestTileEntityRenderer.java | 0 .../client/render/tileentity/CrateChestTileEntityRenderer.java | 0 .../client/render/tileentity/MolluscChestTileEntityRenderer.java | 0 .../client/render/tileentity/SafeTileEntityRenderer.java | 0 .../client/render/tileentity/SkullChestTileEntityRenderer.java | 0 .../client/render/tileentity/StrongboxTileEntityRenderer.java | 0 .../client/render/tileentity/TreasureChestTileEntityRenderer.java | 0 .../client/render/tileentity/WitherChestTileEntityRenderer.java | 0 .../com/someguyssoftware/treasure2/command/SpawnChestCommand.java | 0 .../com/someguyssoftware/treasure2/command/SpawnOasisCommand.java | 0 .../com/someguyssoftware/treasure2/command/SpawnPitCommand.java | 0 .../someguyssoftware/treasure2/command/SpawnPitOnlyCommand.java | 0 .../treasure2/command/SpawnPitStructureOnlyCommand.java | 0 .../com/someguyssoftware/treasure2/command/SpawnRuinsCommand.java | 0 .../treasure2/command/SpawnWellStructureCommand.java | 0 .../treasure2/command/SpawnWitherTreeCommand.java | 0 .../java}/com/someguyssoftware/treasure2/config/BiomesConfig.java | 0 .../java}/com/someguyssoftware/treasure2/config/ChestConfig.java | 0 .../com/someguyssoftware/treasure2/config/IBiomesConfig.java | 0 .../java}/com/someguyssoftware/treasure2/config/IChestConfig.java | 0 .../java}/com/someguyssoftware/treasure2/config/IOasisConfig.java | 0 .../java}/com/someguyssoftware/treasure2/config/IWellConfig.java | 0 .../com/someguyssoftware/treasure2/config/IWitherTreeConfig.java | 0 .../java}/com/someguyssoftware/treasure2/config/LoggerConfig.java | 0 .../java}/com/someguyssoftware/treasure2/config/ModConfig.java | 0 .../java}/com/someguyssoftware/treasure2/config/OasisConfig.java | 0 .../com/someguyssoftware/treasure2/config/TreasureConfig.java | 0 .../com/someguyssoftware/treasure2/entity/TreasureEntities.java | 0 .../treasure2/entity/monster/BoundSoulEntity.java | 0 .../someguyssoftware/treasure2/entity/monster/MimicEntity.java | 0 .../treasure2/entity/monster/PirateMimicEntity.java | 0 .../treasure2/entity/monster/WoodMimicEntity.java | 0 .../java}/com/someguyssoftware/treasure2/enums/Category.java | 0 .../com/someguyssoftware/treasure2/enums/ChestGeneratorType.java | 0 .../java}/com/someguyssoftware/treasure2/enums/Coins.java | 0 .../java}/com/someguyssoftware/treasure2/enums/FogHeight.java | 0 .../java}/com/someguyssoftware/treasure2/enums/FogType.java | 0 .../java}/com/someguyssoftware/treasure2/enums/IEnum.java | 0 .../java}/com/someguyssoftware/treasure2/enums/Pearls.java | 0 .../java}/com/someguyssoftware/treasure2/enums/PitTypes.java | 0 .../java}/com/someguyssoftware/treasure2/enums/Pits.java | 0 .../java}/com/someguyssoftware/treasure2/enums/Rarity.java | 0 .../java}/com/someguyssoftware/treasure2/enums/Wells.java | 0 .../com/someguyssoftware/treasure2/enums/WorldGeneratorType.java | 0 .../treasure2/eventhandler/AnvilEventHandler.java | 0 .../treasure2/eventhandler/LogoutEventHandler.java | 0 .../treasure2/eventhandler/MimicEventHandler.java | 0 .../treasure2/eventhandler/PlayerEventHandler.java | 0 .../treasure2/eventhandler/ServerEventHandler.java | 0 .../treasure2/eventhandler/WorldEventHandler.java | 0 .../someguyssoftware/treasure2/generator/ChestGeneratorData.java | 0 .../java}/com/someguyssoftware/treasure2/generator/GenUtil.java | 0 .../com/someguyssoftware/treasure2/generator/GeneratorData.java | 0 .../com/someguyssoftware/treasure2/generator/GeneratorResult.java | 0 .../com/someguyssoftware/treasure2/generator/IGeneratorData.java | 0 .../someguyssoftware/treasure2/generator/IGeneratorResult.java | 0 .../treasure2/generator/TemplateGeneratorData.java | 0 .../treasure2/generator/chest/CauldronChestGenerator.java | 0 .../treasure2/generator/chest/CommonChestGenerator.java | 0 .../treasure2/generator/chest/EpicChestGenerator.java | 0 .../treasure2/generator/chest/GoldSkullChestGenerator.java | 0 .../treasure2/generator/chest/IChestGenerator.java | 0 .../treasure2/generator/chest/RareChestGenerator.java | 0 .../treasure2/generator/chest/ScarceChestGenerator.java | 0 .../treasure2/generator/chest/SkullChestGenerator.java | 0 .../treasure2/generator/chest/UncommonChestGenerator.java | 0 .../treasure2/generator/chest/WitherChestGenerator.java | 0 .../treasure2/generator/marker/GravestoneMarkerGenerator.java | 0 .../treasure2/generator/marker/IMarkerGenerator.java | 0 .../treasure2/generator/marker/StructureMarkerGenerator.java | 0 .../treasure2/generator/oasis/DesertOasisGenerator.java | 0 .../treasure2/generator/oasis/IOasisGenerator.java | 0 .../com/someguyssoftware/treasure2/generator/oasis/OasisInfo.java | 0 .../treasure2/generator/pit/AbstractPitGenerator.java | 0 .../someguyssoftware/treasure2/generator/pit/AirPitGenerator.java | 0 .../treasure2/generator/pit/BigBottomMobTrapPitGenerator.java | 0 .../treasure2/generator/pit/CollapsingTrapPitGenerator.java | 0 .../someguyssoftware/treasure2/generator/pit/IPitGenerator.java | 0 .../treasure2/generator/pit/LavaSideTrapPitGenerator.java | 0 .../treasure2/generator/pit/LavaTrapPitGenerator.java | 0 .../treasure2/generator/pit/MobTrapPitGenerator.java | 0 .../treasure2/generator/pit/SimplePitGenerator.java | 0 .../treasure2/generator/pit/SimpleShortPitGenerator.java | 0 .../treasure2/generator/pit/StructurePitGenerator.java | 0 .../treasure2/generator/pit/TntTrapPitGenerator.java | 0 .../treasure2/generator/pit/VolcanoPitGenerator.java | 0 .../treasure2/generator/ruins/IRuinGenerator.java | 0 .../treasure2/generator/ruins/SubmergedRuinGenerator.java | 0 .../treasure2/generator/ruins/SurfaceRuinGenerator.java | 0 .../someguyssoftware/treasure2/generator/well/IWellGenerator.java | 0 .../someguyssoftware/treasure2/generator/well/WellGenerator.java | 0 .../treasure2/inventory/AbstractChestContainer.java | 0 .../com/someguyssoftware/treasure2/inventory/ArcanePouchSlot.java | 0 .../treasure2/inventory/ArmoireChestContainer.java | 0 .../treasure2/inventory/CompressorChestContainer.java | 0 .../com/someguyssoftware/treasure2/inventory/InventoryProxy.java | 0 .../someguyssoftware/treasure2/inventory/KeyRingContainer.java | 0 .../someguyssoftware/treasure2/inventory/KeyRingInventory.java | 0 .../com/someguyssoftware/treasure2/inventory/KeyRingSlot.java | 0 .../treasure2/inventory/MolluscChestContainer.java | 0 .../java}/com/someguyssoftware/treasure2/inventory/NoSlot.java | 0 .../com/someguyssoftware/treasure2/inventory/PouchContainer.java | 0 .../com/someguyssoftware/treasure2/inventory/PouchInventory.java | 0 .../java}/com/someguyssoftware/treasure2/inventory/PouchSlot.java | 0 .../someguyssoftware/treasure2/inventory/SkullChestContainer.java | 0 .../treasure2/inventory/StandardChestContainer.java | 0 .../treasure2/inventory/StrongboxChestContainer.java | 0 .../treasure2/inventory/WitherChestContainer.java | 0 .../com/someguyssoftware/treasure2/item/CharmedCoinItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/CharmedGemItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/CoinItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/EmberKey.java | 0 .../java}/com/someguyssoftware/treasure2/item/EmberLock.java | 0 .../java}/com/someguyssoftware/treasure2/item/GemItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/IPouch.java | 0 .../java}/com/someguyssoftware/treasure2/item/IPouchable.java | 0 .../java}/com/someguyssoftware/treasure2/item/JewelledKey.java | 0 .../java}/com/someguyssoftware/treasure2/item/KeyItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/KeyRingItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/LightningKey.java | 0 .../java}/com/someguyssoftware/treasure2/item/LockItem.java | 0 .../com/someguyssoftware/treasure2/item/MetallurgistsKey.java | 0 .../com/someguyssoftware/treasure2/item/MimicChestItemBlock.java | 0 .../java}/com/someguyssoftware/treasure2/item/ModFoodItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/ModSoupItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/PaintingItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/PearlItem.java | 0 .../com/someguyssoftware/treasure2/item/PilferersLockPick.java | 0 .../java}/com/someguyssoftware/treasure2/item/PouchItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/PouchType.java | 0 .../java}/com/someguyssoftware/treasure2/item/SkeletonItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/SkeletonKey.java | 0 .../com/someguyssoftware/treasure2/item/SpanishMossItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/ThiefsLockPick.java | 0 .../someguyssoftware/treasure2/item/TreasureChestItemBlock.java | 0 .../java}/com/someguyssoftware/treasure2/item/TreasureItems.java | 0 .../com/someguyssoftware/treasure2/item/TreasureToolItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/WitherRootItem.java | 0 .../com/someguyssoftware/treasure2/item/WitherStickItem.java | 0 .../java}/com/someguyssoftware/treasure2/item/charm/Charm.java | 0 .../com/someguyssoftware/treasure2/item/charm/CharmBuilder.java | 0 .../com/someguyssoftware/treasure2/item/charm/CharmLevel.java | 0 .../com/someguyssoftware/treasure2/item/charm/CharmState.java | 0 .../someguyssoftware/treasure2/item/charm/CharmStateFactory.java | 0 .../com/someguyssoftware/treasure2/item/charm/CharmType.java | 0 .../com/someguyssoftware/treasure2/item/charm/CharmVitals.java | 0 .../com/someguyssoftware/treasure2/item/charm/DecayCharm.java | 0 .../com/someguyssoftware/treasure2/item/charm/FullnessCharm.java | 0 .../someguyssoftware/treasure2/item/charm/HarvestingCharm.java | 0 .../com/someguyssoftware/treasure2/item/charm/HealingCharm.java | 0 .../java}/com/someguyssoftware/treasure2/item/charm/ICharm.java | 0 .../com/someguyssoftware/treasure2/item/charm/ICharmBuilder.java | 0 .../com/someguyssoftware/treasure2/item/charm/ICharmState.java | 0 .../com/someguyssoftware/treasure2/item/charm/ICharmVitals.java | 0 .../java}/com/someguyssoftware/treasure2/item/charm/ICharmed.java | 0 .../someguyssoftware/treasure2/item/charm/IlluminationCharm.java | 0 .../treasure2/item/charm/IlluminationCharmVitals.java | 0 .../com/someguyssoftware/treasure2/item/charm/ShieldingCharm.java | 0 .../com/someguyssoftware/treasure2/item/charm/TreasureCharms.java | 0 .../java}/com/someguyssoftware/treasure2/item/wish/IWishable.java | 0 .../java}/com/someguyssoftware/treasure2/lock/LockState.java | 0 .../someguyssoftware/treasure2/loot/TreasureLootTableMaster.java | 0 .../someguyssoftware/treasure2/loot/function/CharmRandomly.java | 0 .../com/someguyssoftware/treasure2/loot/function/SetCharms.java | 0 .../com/someguyssoftware/treasure2/meta/StructureArchetype.java | 0 .../java}/com/someguyssoftware/treasure2/meta/StructureMeta.java | 0 .../java}/com/someguyssoftware/treasure2/meta/StructureTheme.java | 0 .../java}/com/someguyssoftware/treasure2/meta/StructureType.java | 0 .../com/someguyssoftware/treasure2/meta/TreasureMetaManager.java | 0 .../com/someguyssoftware/treasure2/model/MeshDefinitionFix.java | 0 .../com/someguyssoftware/treasure2/model/TreasureModels.java | 0 .../treasure2/network/CharmMessageHandlerOnClient.java | 0 .../someguyssoftware/treasure2/network/CharmMessageToClient.java | 0 .../treasure2/network/PoisonMistMessageHandlerOnServer.java | 0 .../treasure2/network/PoisonMistMessageToServer.java | 0 .../treasure2/network/WitherMistMessageHandlerOnServer.java | 0 .../treasure2/network/WitherMistMessageToServer.java | 0 .../someguyssoftware/treasure2/particle/AbstractMistParticle.java | 0 .../treasure2/particle/BillowingMistParticle.java | 0 .../com/someguyssoftware/treasure2/particle/IMistParticle.java | 0 .../com/someguyssoftware/treasure2/particle/MistParticle.java | 0 .../someguyssoftware/treasure2/particle/MistTextureStitcher.java | 0 .../someguyssoftware/treasure2/particle/PoisonMistParticle.java | 0 .../someguyssoftware/treasure2/particle/WitherMistParticle.java | 0 .../treasure2/persistence/GenDataPersistence.java | 0 .../someguyssoftware/treasure2/printer/ChestNBTPrettyPrinter.java | 0 .../java}/com/someguyssoftware/treasure2/proxy/ClientProxy.java | 0 .../com/someguyssoftware/treasure2/registry/ChestRegistry.java | 0 .../com/someguyssoftware/treasure2/registry/OasisRegistry.java | 0 .../treasure2/tileentity/AbstractProximityTileEntity.java | 0 .../treasure2/tileentity/AbstractTreasureChestTileEntity.java | 0 .../treasure2/tileentity/CauldronChestTileEntity.java | 0 .../treasure2/tileentity/ClamChestTileEntity.java | 0 .../treasure2/tileentity/CompressorChestTileEntity.java | 0 .../treasure2/tileentity/CrateChestTileEntity.java | 0 .../treasure2/tileentity/DreadPirateChestTileEntity.java | 0 .../treasure2/tileentity/GoldSkullChestTileEntity.java | 0 .../treasure2/tileentity/GoldStrongboxTileEntity.java | 0 .../tileentity/GravestoneProximitySpawnerTileEntity.java | 0 .../treasure2/tileentity/IProximityTileEntity.java | 0 .../treasure2/tileentity/ITreasureChestTileEntity.java | 0 .../treasure2/tileentity/IronStrongboxTileEntity.java | 0 .../treasure2/tileentity/IronboundChestTileEntity.java | 0 .../treasure2/tileentity/MistEmitterTileEntity.java | 0 .../treasure2/tileentity/MoldyCrateChestTileEntity.java | 0 .../treasure2/tileentity/OysterChestTileEntity.java | 0 .../treasure2/tileentity/PirateChestTileEntity.java | 0 .../treasure2/tileentity/ProximitySpawnerTileEntity.java | 0 .../com/someguyssoftware/treasure2/tileentity/SafeTileEntity.java | 0 .../treasure2/tileentity/SkullChestTileEntity.java | 0 .../treasure2/tileentity/SpiderChestTileEntity.java | 0 .../treasure2/tileentity/VikingChestTileEntity.java | 0 .../treasure2/tileentity/WhaleBonePirateChestTileEntity.java | 0 .../treasure2/tileentity/WitherChestTileEntity.java | 0 .../treasure2/tileentity/WoodChestTileEntity.java | 0 .../java}/com/someguyssoftware/treasure2/wish/IWishProvider.java | 0 .../someguyssoftware/treasure2/wish/IWishProviderFunction.java | 0 .../java}/com/someguyssoftware/treasure2/wish/WishingWell.java | 0 .../treasure2/world/gen/structure/ITemplateGenerator.java | 0 .../treasure2/world/gen/structure/TemplateGenerator.java | 0 .../treasure2/world/gen/structure/TemplateHolder.java | 0 .../treasure2/world/gen/structure/TreasureDecayManager.java | 0 .../treasure2/world/gen/structure/TreasureTemplateManager.java | 0 .../someguyssoftware/treasure2/worldgen/GemOreWorldGenerator.java | 0 .../treasure2/worldgen/ITreasureWorldGenerator.java | 0 .../someguyssoftware/treasure2/worldgen/OasisWorldGenerator.java | 0 .../treasure2/worldgen/SubmergedChestWorldGenerator.java | 0 .../treasure2/worldgen/SurfaceChestWorldGenerator.java | 0 .../someguyssoftware/treasure2/worldgen/WellWorldGenerator.java | 0 .../treasure2/worldgen/WitherTreeWorldGenerator.java | 0 316 files changed, 0 insertions(+), 0 deletions(-) rename src/{ => main/java}/com/someguyssoftware/treasure2/Treasure.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/biome/TreasureBiomeHelper.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/AbstractChestBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/AbstractPaintingBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/BlackstoneBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/DesertWishingWellBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/FallingGrassBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/FallingRedSandBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/FallingSandBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/FogBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/GravestoneBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/GravestoneSpawnerBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/IFogSupport.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/IMimicBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/IMistSupport.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/ITreasureBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/ITreasureChestProxy.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/IWishingWellBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/MimicChestBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/ModLogBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/OreBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/Painting1x1Block.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/PoisonFogBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/ProximityBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/SkeletonBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/SkullAndBonesBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/SpanishMossBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/TreasureBlocks.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/TreasureChestBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/WishingWellBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/WitherBranchBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/WitherBrokenLogBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/WitherChestBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/WitherChestTopBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/WitherFogBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/WitherLogBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/WitherLogSoulBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/WitherPlanksBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/block/WitherRootBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/CharmCapability.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/CharmCapabilityProvider.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/CharmStorage.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageCapability.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageCapabilityProvider.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageStorage.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/ICharmCapability.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/IEffectiveMaxDamageCapability.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/IKeyRingCapability.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/KeyRingCapability.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/KeyRingCapabilityProvider.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/KeyRingStorage.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/capability/PouchCapabilityProvider.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/chest/ChestInfo.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/chest/ILockSlot.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/chest/LockSlot.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/chest/TreasureChestType.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/chest/TreasureChestTypes.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/gui/GuiHandler.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/gui/inventory/ArmoireChestGui.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/gui/inventory/CompressorChestGui.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/gui/inventory/KeyRingGui.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/gui/inventory/MolluscChestGui.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/gui/inventory/PouchGui.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/gui/inventory/SkullChestGui.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/gui/inventory/StandardChestGui.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/gui/inventory/StrongboxChestGui.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/gui/inventory/WitherChestGui.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/BandedChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/CauldronChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/ClamChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/CompressorChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/CrateChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/DreadPirateChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/ITreasureChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/MimicModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/OysterChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/SafeModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/SkullChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/SpiderChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/StandardChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/StrongboxModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/VikingChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/model/WitherChestModel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/entity/BoundSoulRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/entity/MimicEntityRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/tileentity/CauldronChestTileEntityRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/tileentity/CompressorChestTileEntityRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/tileentity/CrateChestTileEntityRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/tileentity/MolluscChestTileEntityRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/tileentity/SafeTileEntityRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/tileentity/SkullChestTileEntityRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/tileentity/StrongboxTileEntityRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/tileentity/TreasureChestTileEntityRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/client/render/tileentity/WitherChestTileEntityRenderer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/command/SpawnChestCommand.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/command/SpawnOasisCommand.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/command/SpawnPitCommand.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/command/SpawnPitOnlyCommand.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/command/SpawnPitStructureOnlyCommand.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/command/SpawnRuinsCommand.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/command/SpawnWellStructureCommand.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/command/SpawnWitherTreeCommand.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/BiomesConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/ChestConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/IBiomesConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/IChestConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/IOasisConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/IWellConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/IWitherTreeConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/LoggerConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/ModConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/OasisConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/config/TreasureConfig.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/entity/TreasureEntities.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/entity/monster/BoundSoulEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/entity/monster/PirateMimicEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/entity/monster/WoodMimicEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/Category.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/Coins.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/FogHeight.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/FogType.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/IEnum.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/Pearls.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/PitTypes.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/Pits.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/Rarity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/Wells.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/enums/WorldGeneratorType.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/eventhandler/AnvilEventHandler.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/eventhandler/LogoutEventHandler.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/eventhandler/MimicEventHandler.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/ChestGeneratorData.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/GenUtil.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/GeneratorData.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/GeneratorResult.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/IGeneratorData.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/IGeneratorResult.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/TemplateGeneratorData.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/chest/EpicChestGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/marker/GravestoneMarkerGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/marker/IMarkerGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/marker/StructureMarkerGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/oasis/DesertOasisGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/oasis/IOasisGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/oasis/OasisInfo.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/AbstractPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/AirPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/BigBottomMobTrapPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/CollapsingTrapPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/IPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/LavaSideTrapPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/LavaTrapPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/MobTrapPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/SimplePitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/SimpleShortPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/StructurePitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/TntTrapPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/pit/VolcanoPitGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/ruins/IRuinGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/ruins/SubmergedRuinGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/ruins/SurfaceRuinGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/well/IWellGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/generator/well/WellGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/AbstractChestContainer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/ArcanePouchSlot.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/ArmoireChestContainer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/CompressorChestContainer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/InventoryProxy.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/KeyRingContainer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/KeyRingInventory.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/KeyRingSlot.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/MolluscChestContainer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/NoSlot.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/PouchContainer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/PouchInventory.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/PouchSlot.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/SkullChestContainer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/StandardChestContainer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/StrongboxChestContainer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/inventory/WitherChestContainer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/CharmedCoinItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/CharmedGemItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/CoinItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/EmberKey.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/EmberLock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/GemItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/IPouch.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/IPouchable.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/JewelledKey.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/KeyItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/KeyRingItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/LightningKey.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/LockItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/MetallurgistsKey.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/MimicChestItemBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/ModFoodItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/ModSoupItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/PaintingItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/PearlItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/PilferersLockPick.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/PouchItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/PouchType.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/SkeletonItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/SkeletonKey.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/SpanishMossItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/ThiefsLockPick.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/TreasureChestItemBlock.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/TreasureItems.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/TreasureToolItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/WitherRootItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/WitherStickItem.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/Charm.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/CharmBuilder.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/CharmLevel.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/CharmState.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/CharmStateFactory.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/CharmType.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/CharmVitals.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/DecayCharm.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/FullnessCharm.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/HealingCharm.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/ICharm.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/ICharmBuilder.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/ICharmState.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/ICharmVitals.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/ICharmed.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/IlluminationCharm.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/IlluminationCharmVitals.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/ShieldingCharm.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/charm/TreasureCharms.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/item/wish/IWishable.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/lock/LockState.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/loot/function/CharmRandomly.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/loot/function/SetCharms.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/meta/StructureArchetype.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/meta/StructureMeta.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/meta/StructureTheme.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/meta/StructureType.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/meta/TreasureMetaManager.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/model/MeshDefinitionFix.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/model/TreasureModels.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/network/CharmMessageHandlerOnClient.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/network/CharmMessageToClient.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/network/PoisonMistMessageHandlerOnServer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/network/PoisonMistMessageToServer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/network/WitherMistMessageHandlerOnServer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/network/WitherMistMessageToServer.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/particle/AbstractMistParticle.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/particle/BillowingMistParticle.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/particle/IMistParticle.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/particle/MistParticle.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/particle/MistTextureStitcher.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/particle/PoisonMistParticle.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/particle/WitherMistParticle.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/persistence/GenDataPersistence.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/printer/ChestNBTPrettyPrinter.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/proxy/ClientProxy.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/registry/ChestRegistry.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/registry/OasisRegistry.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/AbstractProximityTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/AbstractTreasureChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/CauldronChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/ClamChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/CompressorChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/CrateChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/DreadPirateChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/GoldSkullChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/GoldStrongboxTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/GravestoneProximitySpawnerTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/IProximityTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/ITreasureChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/IronStrongboxTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/IronboundChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/MistEmitterTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/MoldyCrateChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/OysterChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/PirateChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/ProximitySpawnerTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/SafeTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/SkullChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/SpiderChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/VikingChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/WhaleBonePirateChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/WitherChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/tileentity/WoodChestTileEntity.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/wish/IWishProvider.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/wish/IWishProviderFunction.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/wish/WishingWell.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/world/gen/structure/ITemplateGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/world/gen/structure/TemplateGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/world/gen/structure/TemplateHolder.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/world/gen/structure/TreasureDecayManager.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/world/gen/structure/TreasureTemplateManager.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/worldgen/GemOreWorldGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/worldgen/ITreasureWorldGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/worldgen/OasisWorldGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/worldgen/SubmergedChestWorldGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/worldgen/SurfaceChestWorldGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/worldgen/WellWorldGenerator.java (100%) rename src/{ => main/java}/com/someguyssoftware/treasure2/worldgen/WitherTreeWorldGenerator.java (100%) diff --git a/src/com/someguyssoftware/treasure2/Treasure.java b/src/main/java/com/someguyssoftware/treasure2/Treasure.java similarity index 100% rename from src/com/someguyssoftware/treasure2/Treasure.java rename to src/main/java/com/someguyssoftware/treasure2/Treasure.java diff --git a/src/com/someguyssoftware/treasure2/biome/TreasureBiomeHelper.java b/src/main/java/com/someguyssoftware/treasure2/biome/TreasureBiomeHelper.java similarity index 100% rename from src/com/someguyssoftware/treasure2/biome/TreasureBiomeHelper.java rename to src/main/java/com/someguyssoftware/treasure2/biome/TreasureBiomeHelper.java diff --git a/src/com/someguyssoftware/treasure2/block/AbstractChestBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/AbstractChestBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/AbstractChestBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/AbstractChestBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/AbstractPaintingBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/AbstractPaintingBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/AbstractPaintingBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/AbstractPaintingBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/BlackstoneBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/BlackstoneBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/BlackstoneBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/BlackstoneBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/DesertWishingWellBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/DesertWishingWellBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/DesertWishingWellBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/DesertWishingWellBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/FallingGrassBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/FallingGrassBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/FallingGrassBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/FallingGrassBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/FallingRedSandBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/FallingRedSandBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/FallingRedSandBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/FallingRedSandBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/FallingSandBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/FallingSandBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/FallingSandBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/FallingSandBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/FogBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/FogBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/FogBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/FogBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/GravestoneBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/GravestoneBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/GravestoneBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/GravestoneBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/GravestoneSpawnerBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/GravestoneSpawnerBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/GravestoneSpawnerBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/GravestoneSpawnerBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/IFogSupport.java b/src/main/java/com/someguyssoftware/treasure2/block/IFogSupport.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/IFogSupport.java rename to src/main/java/com/someguyssoftware/treasure2/block/IFogSupport.java diff --git a/src/com/someguyssoftware/treasure2/block/IMimicBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/IMimicBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/IMimicBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/IMimicBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/IMistSupport.java b/src/main/java/com/someguyssoftware/treasure2/block/IMistSupport.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/IMistSupport.java rename to src/main/java/com/someguyssoftware/treasure2/block/IMistSupport.java diff --git a/src/com/someguyssoftware/treasure2/block/ITreasureBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/ITreasureBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/ITreasureBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/ITreasureBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/ITreasureChestProxy.java b/src/main/java/com/someguyssoftware/treasure2/block/ITreasureChestProxy.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/ITreasureChestProxy.java rename to src/main/java/com/someguyssoftware/treasure2/block/ITreasureChestProxy.java diff --git a/src/com/someguyssoftware/treasure2/block/IWishingWellBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/IWishingWellBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/IWishingWellBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/IWishingWellBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/MimicChestBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/MimicChestBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/MimicChestBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/MimicChestBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/ModLogBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/ModLogBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/ModLogBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/ModLogBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/OreBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/OreBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/OreBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/OreBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/Painting1x1Block.java b/src/main/java/com/someguyssoftware/treasure2/block/Painting1x1Block.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/Painting1x1Block.java rename to src/main/java/com/someguyssoftware/treasure2/block/Painting1x1Block.java diff --git a/src/com/someguyssoftware/treasure2/block/PoisonFogBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/PoisonFogBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/PoisonFogBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/PoisonFogBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/ProximityBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/ProximityBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/ProximityBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/ProximityBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/SkeletonBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/SkeletonBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/SkeletonBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/SkeletonBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/SkullAndBonesBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/SkullAndBonesBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/SkullAndBonesBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/SkullAndBonesBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/SpanishMossBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/SpanishMossBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/SpanishMossBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/SpanishMossBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/TreasureBlocks.java b/src/main/java/com/someguyssoftware/treasure2/block/TreasureBlocks.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/TreasureBlocks.java rename to src/main/java/com/someguyssoftware/treasure2/block/TreasureBlocks.java diff --git a/src/com/someguyssoftware/treasure2/block/TreasureChestBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/TreasureChestBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/TreasureChestBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/TreasureChestBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/WishingWellBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/WishingWellBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/WishingWellBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/WishingWellBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/WitherBranchBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/WitherBranchBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/WitherBranchBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/WitherBranchBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/WitherBrokenLogBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/WitherBrokenLogBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/WitherBrokenLogBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/WitherBrokenLogBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/WitherChestBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/WitherChestBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/WitherChestBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/WitherChestBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/WitherChestTopBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/WitherChestTopBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/WitherChestTopBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/WitherChestTopBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/WitherFogBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/WitherFogBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/WitherFogBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/WitherFogBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/WitherLogBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/WitherLogBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/WitherLogBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/WitherLogBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/WitherLogSoulBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/WitherLogSoulBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/WitherLogSoulBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/WitherLogSoulBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/WitherPlanksBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/WitherPlanksBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/WitherPlanksBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/WitherPlanksBlock.java diff --git a/src/com/someguyssoftware/treasure2/block/WitherRootBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/WitherRootBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/block/WitherRootBlock.java rename to src/main/java/com/someguyssoftware/treasure2/block/WitherRootBlock.java diff --git a/src/com/someguyssoftware/treasure2/capability/CharmCapability.java b/src/main/java/com/someguyssoftware/treasure2/capability/CharmCapability.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/CharmCapability.java rename to src/main/java/com/someguyssoftware/treasure2/capability/CharmCapability.java diff --git a/src/com/someguyssoftware/treasure2/capability/CharmCapabilityProvider.java b/src/main/java/com/someguyssoftware/treasure2/capability/CharmCapabilityProvider.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/CharmCapabilityProvider.java rename to src/main/java/com/someguyssoftware/treasure2/capability/CharmCapabilityProvider.java diff --git a/src/com/someguyssoftware/treasure2/capability/CharmStorage.java b/src/main/java/com/someguyssoftware/treasure2/capability/CharmStorage.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/CharmStorage.java rename to src/main/java/com/someguyssoftware/treasure2/capability/CharmStorage.java diff --git a/src/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageCapability.java b/src/main/java/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageCapability.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageCapability.java rename to src/main/java/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageCapability.java diff --git a/src/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageCapabilityProvider.java b/src/main/java/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageCapabilityProvider.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageCapabilityProvider.java rename to src/main/java/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageCapabilityProvider.java diff --git a/src/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageStorage.java b/src/main/java/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageStorage.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageStorage.java rename to src/main/java/com/someguyssoftware/treasure2/capability/EffectiveMaxDamageStorage.java diff --git a/src/com/someguyssoftware/treasure2/capability/ICharmCapability.java b/src/main/java/com/someguyssoftware/treasure2/capability/ICharmCapability.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/ICharmCapability.java rename to src/main/java/com/someguyssoftware/treasure2/capability/ICharmCapability.java diff --git a/src/com/someguyssoftware/treasure2/capability/IEffectiveMaxDamageCapability.java b/src/main/java/com/someguyssoftware/treasure2/capability/IEffectiveMaxDamageCapability.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/IEffectiveMaxDamageCapability.java rename to src/main/java/com/someguyssoftware/treasure2/capability/IEffectiveMaxDamageCapability.java diff --git a/src/com/someguyssoftware/treasure2/capability/IKeyRingCapability.java b/src/main/java/com/someguyssoftware/treasure2/capability/IKeyRingCapability.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/IKeyRingCapability.java rename to src/main/java/com/someguyssoftware/treasure2/capability/IKeyRingCapability.java diff --git a/src/com/someguyssoftware/treasure2/capability/KeyRingCapability.java b/src/main/java/com/someguyssoftware/treasure2/capability/KeyRingCapability.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/KeyRingCapability.java rename to src/main/java/com/someguyssoftware/treasure2/capability/KeyRingCapability.java diff --git a/src/com/someguyssoftware/treasure2/capability/KeyRingCapabilityProvider.java b/src/main/java/com/someguyssoftware/treasure2/capability/KeyRingCapabilityProvider.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/KeyRingCapabilityProvider.java rename to src/main/java/com/someguyssoftware/treasure2/capability/KeyRingCapabilityProvider.java diff --git a/src/com/someguyssoftware/treasure2/capability/KeyRingStorage.java b/src/main/java/com/someguyssoftware/treasure2/capability/KeyRingStorage.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/KeyRingStorage.java rename to src/main/java/com/someguyssoftware/treasure2/capability/KeyRingStorage.java diff --git a/src/com/someguyssoftware/treasure2/capability/PouchCapabilityProvider.java b/src/main/java/com/someguyssoftware/treasure2/capability/PouchCapabilityProvider.java similarity index 100% rename from src/com/someguyssoftware/treasure2/capability/PouchCapabilityProvider.java rename to src/main/java/com/someguyssoftware/treasure2/capability/PouchCapabilityProvider.java diff --git a/src/com/someguyssoftware/treasure2/chest/ChestInfo.java b/src/main/java/com/someguyssoftware/treasure2/chest/ChestInfo.java similarity index 100% rename from src/com/someguyssoftware/treasure2/chest/ChestInfo.java rename to src/main/java/com/someguyssoftware/treasure2/chest/ChestInfo.java diff --git a/src/com/someguyssoftware/treasure2/chest/ILockSlot.java b/src/main/java/com/someguyssoftware/treasure2/chest/ILockSlot.java similarity index 100% rename from src/com/someguyssoftware/treasure2/chest/ILockSlot.java rename to src/main/java/com/someguyssoftware/treasure2/chest/ILockSlot.java diff --git a/src/com/someguyssoftware/treasure2/chest/LockSlot.java b/src/main/java/com/someguyssoftware/treasure2/chest/LockSlot.java similarity index 100% rename from src/com/someguyssoftware/treasure2/chest/LockSlot.java rename to src/main/java/com/someguyssoftware/treasure2/chest/LockSlot.java diff --git a/src/com/someguyssoftware/treasure2/chest/TreasureChestType.java b/src/main/java/com/someguyssoftware/treasure2/chest/TreasureChestType.java similarity index 100% rename from src/com/someguyssoftware/treasure2/chest/TreasureChestType.java rename to src/main/java/com/someguyssoftware/treasure2/chest/TreasureChestType.java diff --git a/src/com/someguyssoftware/treasure2/chest/TreasureChestTypes.java b/src/main/java/com/someguyssoftware/treasure2/chest/TreasureChestTypes.java similarity index 100% rename from src/com/someguyssoftware/treasure2/chest/TreasureChestTypes.java rename to src/main/java/com/someguyssoftware/treasure2/chest/TreasureChestTypes.java diff --git a/src/com/someguyssoftware/treasure2/client/gui/GuiHandler.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/gui/GuiHandler.java rename to src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java diff --git a/src/com/someguyssoftware/treasure2/client/gui/inventory/ArmoireChestGui.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/ArmoireChestGui.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/gui/inventory/ArmoireChestGui.java rename to src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/ArmoireChestGui.java diff --git a/src/com/someguyssoftware/treasure2/client/gui/inventory/CompressorChestGui.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/CompressorChestGui.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/gui/inventory/CompressorChestGui.java rename to src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/CompressorChestGui.java diff --git a/src/com/someguyssoftware/treasure2/client/gui/inventory/KeyRingGui.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/KeyRingGui.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/gui/inventory/KeyRingGui.java rename to src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/KeyRingGui.java diff --git a/src/com/someguyssoftware/treasure2/client/gui/inventory/MolluscChestGui.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/MolluscChestGui.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/gui/inventory/MolluscChestGui.java rename to src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/MolluscChestGui.java diff --git a/src/com/someguyssoftware/treasure2/client/gui/inventory/PouchGui.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/PouchGui.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/gui/inventory/PouchGui.java rename to src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/PouchGui.java diff --git a/src/com/someguyssoftware/treasure2/client/gui/inventory/SkullChestGui.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/SkullChestGui.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/gui/inventory/SkullChestGui.java rename to src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/SkullChestGui.java diff --git a/src/com/someguyssoftware/treasure2/client/gui/inventory/StandardChestGui.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/StandardChestGui.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/gui/inventory/StandardChestGui.java rename to src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/StandardChestGui.java diff --git a/src/com/someguyssoftware/treasure2/client/gui/inventory/StrongboxChestGui.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/StrongboxChestGui.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/gui/inventory/StrongboxChestGui.java rename to src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/StrongboxChestGui.java diff --git a/src/com/someguyssoftware/treasure2/client/gui/inventory/WitherChestGui.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/WitherChestGui.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/gui/inventory/WitherChestGui.java rename to src/main/java/com/someguyssoftware/treasure2/client/gui/inventory/WitherChestGui.java diff --git a/src/com/someguyssoftware/treasure2/client/model/BandedChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/BandedChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/BandedChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/BandedChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/CauldronChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/CauldronChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/CauldronChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/CauldronChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/ClamChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/ClamChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/ClamChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/ClamChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/CompressorChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/CompressorChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/CompressorChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/CompressorChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/CrateChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/CrateChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/CrateChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/CrateChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/DreadPirateChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/DreadPirateChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/DreadPirateChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/DreadPirateChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/ITreasureChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/ITreasureChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/ITreasureChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/ITreasureChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/MimicModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/MimicModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/MimicModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/MimicModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/OysterChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/OysterChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/OysterChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/OysterChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/SafeModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/SafeModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/SafeModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/SafeModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/SkullChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/SkullChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/SkullChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/SkullChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/SpiderChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/SpiderChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/SpiderChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/SpiderChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/StandardChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/StandardChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/StandardChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/StandardChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/StrongboxModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/StrongboxModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/StrongboxModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/StrongboxModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/VikingChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/VikingChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/VikingChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/VikingChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/model/WitherChestModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/WitherChestModel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/model/WitherChestModel.java rename to src/main/java/com/someguyssoftware/treasure2/client/model/WitherChestModel.java diff --git a/src/com/someguyssoftware/treasure2/client/render/entity/BoundSoulRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/entity/BoundSoulRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/entity/BoundSoulRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/entity/BoundSoulRenderer.java diff --git a/src/com/someguyssoftware/treasure2/client/render/entity/MimicEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/entity/MimicEntityRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/entity/MimicEntityRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/entity/MimicEntityRenderer.java diff --git a/src/com/someguyssoftware/treasure2/client/render/tileentity/CauldronChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CauldronChestTileEntityRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/tileentity/CauldronChestTileEntityRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CauldronChestTileEntityRenderer.java diff --git a/src/com/someguyssoftware/treasure2/client/render/tileentity/CompressorChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CompressorChestTileEntityRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/tileentity/CompressorChestTileEntityRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CompressorChestTileEntityRenderer.java diff --git a/src/com/someguyssoftware/treasure2/client/render/tileentity/CrateChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CrateChestTileEntityRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/tileentity/CrateChestTileEntityRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CrateChestTileEntityRenderer.java diff --git a/src/com/someguyssoftware/treasure2/client/render/tileentity/MolluscChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/MolluscChestTileEntityRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/tileentity/MolluscChestTileEntityRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/MolluscChestTileEntityRenderer.java diff --git a/src/com/someguyssoftware/treasure2/client/render/tileentity/SafeTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SafeTileEntityRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/tileentity/SafeTileEntityRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SafeTileEntityRenderer.java diff --git a/src/com/someguyssoftware/treasure2/client/render/tileentity/SkullChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SkullChestTileEntityRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/tileentity/SkullChestTileEntityRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SkullChestTileEntityRenderer.java diff --git a/src/com/someguyssoftware/treasure2/client/render/tileentity/StrongboxTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/StrongboxTileEntityRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/tileentity/StrongboxTileEntityRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/StrongboxTileEntityRenderer.java diff --git a/src/com/someguyssoftware/treasure2/client/render/tileentity/TreasureChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/TreasureChestTileEntityRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/tileentity/TreasureChestTileEntityRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/TreasureChestTileEntityRenderer.java diff --git a/src/com/someguyssoftware/treasure2/client/render/tileentity/WitherChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/WitherChestTileEntityRenderer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/client/render/tileentity/WitherChestTileEntityRenderer.java rename to src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/WitherChestTileEntityRenderer.java diff --git a/src/com/someguyssoftware/treasure2/command/SpawnChestCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java similarity index 100% rename from src/com/someguyssoftware/treasure2/command/SpawnChestCommand.java rename to src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java diff --git a/src/com/someguyssoftware/treasure2/command/SpawnOasisCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnOasisCommand.java similarity index 100% rename from src/com/someguyssoftware/treasure2/command/SpawnOasisCommand.java rename to src/main/java/com/someguyssoftware/treasure2/command/SpawnOasisCommand.java diff --git a/src/com/someguyssoftware/treasure2/command/SpawnPitCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnPitCommand.java similarity index 100% rename from src/com/someguyssoftware/treasure2/command/SpawnPitCommand.java rename to src/main/java/com/someguyssoftware/treasure2/command/SpawnPitCommand.java diff --git a/src/com/someguyssoftware/treasure2/command/SpawnPitOnlyCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnPitOnlyCommand.java similarity index 100% rename from src/com/someguyssoftware/treasure2/command/SpawnPitOnlyCommand.java rename to src/main/java/com/someguyssoftware/treasure2/command/SpawnPitOnlyCommand.java diff --git a/src/com/someguyssoftware/treasure2/command/SpawnPitStructureOnlyCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnPitStructureOnlyCommand.java similarity index 100% rename from src/com/someguyssoftware/treasure2/command/SpawnPitStructureOnlyCommand.java rename to src/main/java/com/someguyssoftware/treasure2/command/SpawnPitStructureOnlyCommand.java diff --git a/src/com/someguyssoftware/treasure2/command/SpawnRuinsCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnRuinsCommand.java similarity index 100% rename from src/com/someguyssoftware/treasure2/command/SpawnRuinsCommand.java rename to src/main/java/com/someguyssoftware/treasure2/command/SpawnRuinsCommand.java diff --git a/src/com/someguyssoftware/treasure2/command/SpawnWellStructureCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnWellStructureCommand.java similarity index 100% rename from src/com/someguyssoftware/treasure2/command/SpawnWellStructureCommand.java rename to src/main/java/com/someguyssoftware/treasure2/command/SpawnWellStructureCommand.java diff --git a/src/com/someguyssoftware/treasure2/command/SpawnWitherTreeCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnWitherTreeCommand.java similarity index 100% rename from src/com/someguyssoftware/treasure2/command/SpawnWitherTreeCommand.java rename to src/main/java/com/someguyssoftware/treasure2/command/SpawnWitherTreeCommand.java diff --git a/src/com/someguyssoftware/treasure2/config/BiomesConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/BiomesConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/BiomesConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/BiomesConfig.java diff --git a/src/com/someguyssoftware/treasure2/config/ChestConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/ChestConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/ChestConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/ChestConfig.java diff --git a/src/com/someguyssoftware/treasure2/config/IBiomesConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/IBiomesConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/IBiomesConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/IBiomesConfig.java diff --git a/src/com/someguyssoftware/treasure2/config/IChestConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/IChestConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/IChestConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/IChestConfig.java diff --git a/src/com/someguyssoftware/treasure2/config/IOasisConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/IOasisConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/IOasisConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/IOasisConfig.java diff --git a/src/com/someguyssoftware/treasure2/config/IWellConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/IWellConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/IWellConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/IWellConfig.java diff --git a/src/com/someguyssoftware/treasure2/config/IWitherTreeConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/IWitherTreeConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/IWitherTreeConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/IWitherTreeConfig.java diff --git a/src/com/someguyssoftware/treasure2/config/LoggerConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/LoggerConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/LoggerConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/LoggerConfig.java diff --git a/src/com/someguyssoftware/treasure2/config/ModConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/ModConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/ModConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/ModConfig.java diff --git a/src/com/someguyssoftware/treasure2/config/OasisConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/OasisConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/OasisConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/OasisConfig.java diff --git a/src/com/someguyssoftware/treasure2/config/TreasureConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/TreasureConfig.java similarity index 100% rename from src/com/someguyssoftware/treasure2/config/TreasureConfig.java rename to src/main/java/com/someguyssoftware/treasure2/config/TreasureConfig.java diff --git a/src/com/someguyssoftware/treasure2/entity/TreasureEntities.java b/src/main/java/com/someguyssoftware/treasure2/entity/TreasureEntities.java similarity index 100% rename from src/com/someguyssoftware/treasure2/entity/TreasureEntities.java rename to src/main/java/com/someguyssoftware/treasure2/entity/TreasureEntities.java diff --git a/src/com/someguyssoftware/treasure2/entity/monster/BoundSoulEntity.java b/src/main/java/com/someguyssoftware/treasure2/entity/monster/BoundSoulEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/entity/monster/BoundSoulEntity.java rename to src/main/java/com/someguyssoftware/treasure2/entity/monster/BoundSoulEntity.java diff --git a/src/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java b/src/main/java/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java rename to src/main/java/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java diff --git a/src/com/someguyssoftware/treasure2/entity/monster/PirateMimicEntity.java b/src/main/java/com/someguyssoftware/treasure2/entity/monster/PirateMimicEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/entity/monster/PirateMimicEntity.java rename to src/main/java/com/someguyssoftware/treasure2/entity/monster/PirateMimicEntity.java diff --git a/src/com/someguyssoftware/treasure2/entity/monster/WoodMimicEntity.java b/src/main/java/com/someguyssoftware/treasure2/entity/monster/WoodMimicEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/entity/monster/WoodMimicEntity.java rename to src/main/java/com/someguyssoftware/treasure2/entity/monster/WoodMimicEntity.java diff --git a/src/com/someguyssoftware/treasure2/enums/Category.java b/src/main/java/com/someguyssoftware/treasure2/enums/Category.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/Category.java rename to src/main/java/com/someguyssoftware/treasure2/enums/Category.java diff --git a/src/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java b/src/main/java/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java rename to src/main/java/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java diff --git a/src/com/someguyssoftware/treasure2/enums/Coins.java b/src/main/java/com/someguyssoftware/treasure2/enums/Coins.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/Coins.java rename to src/main/java/com/someguyssoftware/treasure2/enums/Coins.java diff --git a/src/com/someguyssoftware/treasure2/enums/FogHeight.java b/src/main/java/com/someguyssoftware/treasure2/enums/FogHeight.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/FogHeight.java rename to src/main/java/com/someguyssoftware/treasure2/enums/FogHeight.java diff --git a/src/com/someguyssoftware/treasure2/enums/FogType.java b/src/main/java/com/someguyssoftware/treasure2/enums/FogType.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/FogType.java rename to src/main/java/com/someguyssoftware/treasure2/enums/FogType.java diff --git a/src/com/someguyssoftware/treasure2/enums/IEnum.java b/src/main/java/com/someguyssoftware/treasure2/enums/IEnum.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/IEnum.java rename to src/main/java/com/someguyssoftware/treasure2/enums/IEnum.java diff --git a/src/com/someguyssoftware/treasure2/enums/Pearls.java b/src/main/java/com/someguyssoftware/treasure2/enums/Pearls.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/Pearls.java rename to src/main/java/com/someguyssoftware/treasure2/enums/Pearls.java diff --git a/src/com/someguyssoftware/treasure2/enums/PitTypes.java b/src/main/java/com/someguyssoftware/treasure2/enums/PitTypes.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/PitTypes.java rename to src/main/java/com/someguyssoftware/treasure2/enums/PitTypes.java diff --git a/src/com/someguyssoftware/treasure2/enums/Pits.java b/src/main/java/com/someguyssoftware/treasure2/enums/Pits.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/Pits.java rename to src/main/java/com/someguyssoftware/treasure2/enums/Pits.java diff --git a/src/com/someguyssoftware/treasure2/enums/Rarity.java b/src/main/java/com/someguyssoftware/treasure2/enums/Rarity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/Rarity.java rename to src/main/java/com/someguyssoftware/treasure2/enums/Rarity.java diff --git a/src/com/someguyssoftware/treasure2/enums/Wells.java b/src/main/java/com/someguyssoftware/treasure2/enums/Wells.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/Wells.java rename to src/main/java/com/someguyssoftware/treasure2/enums/Wells.java diff --git a/src/com/someguyssoftware/treasure2/enums/WorldGeneratorType.java b/src/main/java/com/someguyssoftware/treasure2/enums/WorldGeneratorType.java similarity index 100% rename from src/com/someguyssoftware/treasure2/enums/WorldGeneratorType.java rename to src/main/java/com/someguyssoftware/treasure2/enums/WorldGeneratorType.java diff --git a/src/com/someguyssoftware/treasure2/eventhandler/AnvilEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/AnvilEventHandler.java similarity index 100% rename from src/com/someguyssoftware/treasure2/eventhandler/AnvilEventHandler.java rename to src/main/java/com/someguyssoftware/treasure2/eventhandler/AnvilEventHandler.java diff --git a/src/com/someguyssoftware/treasure2/eventhandler/LogoutEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/LogoutEventHandler.java similarity index 100% rename from src/com/someguyssoftware/treasure2/eventhandler/LogoutEventHandler.java rename to src/main/java/com/someguyssoftware/treasure2/eventhandler/LogoutEventHandler.java diff --git a/src/com/someguyssoftware/treasure2/eventhandler/MimicEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/MimicEventHandler.java similarity index 100% rename from src/com/someguyssoftware/treasure2/eventhandler/MimicEventHandler.java rename to src/main/java/com/someguyssoftware/treasure2/eventhandler/MimicEventHandler.java diff --git a/src/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java similarity index 100% rename from src/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java rename to src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java diff --git a/src/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java similarity index 100% rename from src/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java rename to src/main/java/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java diff --git a/src/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java similarity index 100% rename from src/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java rename to src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java diff --git a/src/com/someguyssoftware/treasure2/generator/ChestGeneratorData.java b/src/main/java/com/someguyssoftware/treasure2/generator/ChestGeneratorData.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/ChestGeneratorData.java rename to src/main/java/com/someguyssoftware/treasure2/generator/ChestGeneratorData.java diff --git a/src/com/someguyssoftware/treasure2/generator/GenUtil.java b/src/main/java/com/someguyssoftware/treasure2/generator/GenUtil.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/GenUtil.java rename to src/main/java/com/someguyssoftware/treasure2/generator/GenUtil.java diff --git a/src/com/someguyssoftware/treasure2/generator/GeneratorData.java b/src/main/java/com/someguyssoftware/treasure2/generator/GeneratorData.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/GeneratorData.java rename to src/main/java/com/someguyssoftware/treasure2/generator/GeneratorData.java diff --git a/src/com/someguyssoftware/treasure2/generator/GeneratorResult.java b/src/main/java/com/someguyssoftware/treasure2/generator/GeneratorResult.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/GeneratorResult.java rename to src/main/java/com/someguyssoftware/treasure2/generator/GeneratorResult.java diff --git a/src/com/someguyssoftware/treasure2/generator/IGeneratorData.java b/src/main/java/com/someguyssoftware/treasure2/generator/IGeneratorData.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/IGeneratorData.java rename to src/main/java/com/someguyssoftware/treasure2/generator/IGeneratorData.java diff --git a/src/com/someguyssoftware/treasure2/generator/IGeneratorResult.java b/src/main/java/com/someguyssoftware/treasure2/generator/IGeneratorResult.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/IGeneratorResult.java rename to src/main/java/com/someguyssoftware/treasure2/generator/IGeneratorResult.java diff --git a/src/com/someguyssoftware/treasure2/generator/TemplateGeneratorData.java b/src/main/java/com/someguyssoftware/treasure2/generator/TemplateGeneratorData.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/TemplateGeneratorData.java rename to src/main/java/com/someguyssoftware/treasure2/generator/TemplateGeneratorData.java diff --git a/src/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/chest/EpicChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/EpicChestGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/chest/EpicChestGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/chest/EpicChestGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/marker/GravestoneMarkerGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/marker/GravestoneMarkerGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/marker/GravestoneMarkerGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/marker/GravestoneMarkerGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/marker/IMarkerGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/marker/IMarkerGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/marker/IMarkerGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/marker/IMarkerGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/marker/StructureMarkerGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/marker/StructureMarkerGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/marker/StructureMarkerGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/marker/StructureMarkerGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/oasis/DesertOasisGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/oasis/DesertOasisGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/oasis/DesertOasisGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/oasis/DesertOasisGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/oasis/IOasisGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/oasis/IOasisGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/oasis/IOasisGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/oasis/IOasisGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/oasis/OasisInfo.java b/src/main/java/com/someguyssoftware/treasure2/generator/oasis/OasisInfo.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/oasis/OasisInfo.java rename to src/main/java/com/someguyssoftware/treasure2/generator/oasis/OasisInfo.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/AbstractPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/AbstractPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/AbstractPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/AbstractPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/AirPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/AirPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/AirPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/AirPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/BigBottomMobTrapPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/BigBottomMobTrapPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/BigBottomMobTrapPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/BigBottomMobTrapPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/CollapsingTrapPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/CollapsingTrapPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/CollapsingTrapPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/CollapsingTrapPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/IPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/IPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/IPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/IPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/LavaSideTrapPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/LavaSideTrapPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/LavaSideTrapPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/LavaSideTrapPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/LavaTrapPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/LavaTrapPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/LavaTrapPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/LavaTrapPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/MobTrapPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/MobTrapPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/MobTrapPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/MobTrapPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/SimplePitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/SimplePitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/SimplePitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/SimplePitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/SimpleShortPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/SimpleShortPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/SimpleShortPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/SimpleShortPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/StructurePitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/StructurePitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/StructurePitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/StructurePitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/TntTrapPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/TntTrapPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/TntTrapPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/TntTrapPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/pit/VolcanoPitGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/pit/VolcanoPitGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/pit/VolcanoPitGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/pit/VolcanoPitGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/ruins/IRuinGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/ruins/IRuinGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/ruins/IRuinGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/ruins/IRuinGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/ruins/SubmergedRuinGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/ruins/SubmergedRuinGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/ruins/SubmergedRuinGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/ruins/SubmergedRuinGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/ruins/SurfaceRuinGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/ruins/SurfaceRuinGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/ruins/SurfaceRuinGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/ruins/SurfaceRuinGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/well/IWellGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/well/IWellGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/well/IWellGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/well/IWellGenerator.java diff --git a/src/com/someguyssoftware/treasure2/generator/well/WellGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/well/WellGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/generator/well/WellGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/generator/well/WellGenerator.java diff --git a/src/com/someguyssoftware/treasure2/inventory/AbstractChestContainer.java b/src/main/java/com/someguyssoftware/treasure2/inventory/AbstractChestContainer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/AbstractChestContainer.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/AbstractChestContainer.java diff --git a/src/com/someguyssoftware/treasure2/inventory/ArcanePouchSlot.java b/src/main/java/com/someguyssoftware/treasure2/inventory/ArcanePouchSlot.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/ArcanePouchSlot.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/ArcanePouchSlot.java diff --git a/src/com/someguyssoftware/treasure2/inventory/ArmoireChestContainer.java b/src/main/java/com/someguyssoftware/treasure2/inventory/ArmoireChestContainer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/ArmoireChestContainer.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/ArmoireChestContainer.java diff --git a/src/com/someguyssoftware/treasure2/inventory/CompressorChestContainer.java b/src/main/java/com/someguyssoftware/treasure2/inventory/CompressorChestContainer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/CompressorChestContainer.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/CompressorChestContainer.java diff --git a/src/com/someguyssoftware/treasure2/inventory/InventoryProxy.java b/src/main/java/com/someguyssoftware/treasure2/inventory/InventoryProxy.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/InventoryProxy.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/InventoryProxy.java diff --git a/src/com/someguyssoftware/treasure2/inventory/KeyRingContainer.java b/src/main/java/com/someguyssoftware/treasure2/inventory/KeyRingContainer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/KeyRingContainer.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/KeyRingContainer.java diff --git a/src/com/someguyssoftware/treasure2/inventory/KeyRingInventory.java b/src/main/java/com/someguyssoftware/treasure2/inventory/KeyRingInventory.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/KeyRingInventory.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/KeyRingInventory.java diff --git a/src/com/someguyssoftware/treasure2/inventory/KeyRingSlot.java b/src/main/java/com/someguyssoftware/treasure2/inventory/KeyRingSlot.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/KeyRingSlot.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/KeyRingSlot.java diff --git a/src/com/someguyssoftware/treasure2/inventory/MolluscChestContainer.java b/src/main/java/com/someguyssoftware/treasure2/inventory/MolluscChestContainer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/MolluscChestContainer.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/MolluscChestContainer.java diff --git a/src/com/someguyssoftware/treasure2/inventory/NoSlot.java b/src/main/java/com/someguyssoftware/treasure2/inventory/NoSlot.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/NoSlot.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/NoSlot.java diff --git a/src/com/someguyssoftware/treasure2/inventory/PouchContainer.java b/src/main/java/com/someguyssoftware/treasure2/inventory/PouchContainer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/PouchContainer.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/PouchContainer.java diff --git a/src/com/someguyssoftware/treasure2/inventory/PouchInventory.java b/src/main/java/com/someguyssoftware/treasure2/inventory/PouchInventory.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/PouchInventory.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/PouchInventory.java diff --git a/src/com/someguyssoftware/treasure2/inventory/PouchSlot.java b/src/main/java/com/someguyssoftware/treasure2/inventory/PouchSlot.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/PouchSlot.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/PouchSlot.java diff --git a/src/com/someguyssoftware/treasure2/inventory/SkullChestContainer.java b/src/main/java/com/someguyssoftware/treasure2/inventory/SkullChestContainer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/SkullChestContainer.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/SkullChestContainer.java diff --git a/src/com/someguyssoftware/treasure2/inventory/StandardChestContainer.java b/src/main/java/com/someguyssoftware/treasure2/inventory/StandardChestContainer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/StandardChestContainer.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/StandardChestContainer.java diff --git a/src/com/someguyssoftware/treasure2/inventory/StrongboxChestContainer.java b/src/main/java/com/someguyssoftware/treasure2/inventory/StrongboxChestContainer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/StrongboxChestContainer.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/StrongboxChestContainer.java diff --git a/src/com/someguyssoftware/treasure2/inventory/WitherChestContainer.java b/src/main/java/com/someguyssoftware/treasure2/inventory/WitherChestContainer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/inventory/WitherChestContainer.java rename to src/main/java/com/someguyssoftware/treasure2/inventory/WitherChestContainer.java diff --git a/src/com/someguyssoftware/treasure2/item/CharmedCoinItem.java b/src/main/java/com/someguyssoftware/treasure2/item/CharmedCoinItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/CharmedCoinItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/CharmedCoinItem.java diff --git a/src/com/someguyssoftware/treasure2/item/CharmedGemItem.java b/src/main/java/com/someguyssoftware/treasure2/item/CharmedGemItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/CharmedGemItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/CharmedGemItem.java diff --git a/src/com/someguyssoftware/treasure2/item/CoinItem.java b/src/main/java/com/someguyssoftware/treasure2/item/CoinItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/CoinItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/CoinItem.java diff --git a/src/com/someguyssoftware/treasure2/item/EmberKey.java b/src/main/java/com/someguyssoftware/treasure2/item/EmberKey.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/EmberKey.java rename to src/main/java/com/someguyssoftware/treasure2/item/EmberKey.java diff --git a/src/com/someguyssoftware/treasure2/item/EmberLock.java b/src/main/java/com/someguyssoftware/treasure2/item/EmberLock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/EmberLock.java rename to src/main/java/com/someguyssoftware/treasure2/item/EmberLock.java diff --git a/src/com/someguyssoftware/treasure2/item/GemItem.java b/src/main/java/com/someguyssoftware/treasure2/item/GemItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/GemItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/GemItem.java diff --git a/src/com/someguyssoftware/treasure2/item/IPouch.java b/src/main/java/com/someguyssoftware/treasure2/item/IPouch.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/IPouch.java rename to src/main/java/com/someguyssoftware/treasure2/item/IPouch.java diff --git a/src/com/someguyssoftware/treasure2/item/IPouchable.java b/src/main/java/com/someguyssoftware/treasure2/item/IPouchable.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/IPouchable.java rename to src/main/java/com/someguyssoftware/treasure2/item/IPouchable.java diff --git a/src/com/someguyssoftware/treasure2/item/JewelledKey.java b/src/main/java/com/someguyssoftware/treasure2/item/JewelledKey.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/JewelledKey.java rename to src/main/java/com/someguyssoftware/treasure2/item/JewelledKey.java diff --git a/src/com/someguyssoftware/treasure2/item/KeyItem.java b/src/main/java/com/someguyssoftware/treasure2/item/KeyItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/KeyItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/KeyItem.java diff --git a/src/com/someguyssoftware/treasure2/item/KeyRingItem.java b/src/main/java/com/someguyssoftware/treasure2/item/KeyRingItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/KeyRingItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/KeyRingItem.java diff --git a/src/com/someguyssoftware/treasure2/item/LightningKey.java b/src/main/java/com/someguyssoftware/treasure2/item/LightningKey.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/LightningKey.java rename to src/main/java/com/someguyssoftware/treasure2/item/LightningKey.java diff --git a/src/com/someguyssoftware/treasure2/item/LockItem.java b/src/main/java/com/someguyssoftware/treasure2/item/LockItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/LockItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/LockItem.java diff --git a/src/com/someguyssoftware/treasure2/item/MetallurgistsKey.java b/src/main/java/com/someguyssoftware/treasure2/item/MetallurgistsKey.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/MetallurgistsKey.java rename to src/main/java/com/someguyssoftware/treasure2/item/MetallurgistsKey.java diff --git a/src/com/someguyssoftware/treasure2/item/MimicChestItemBlock.java b/src/main/java/com/someguyssoftware/treasure2/item/MimicChestItemBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/MimicChestItemBlock.java rename to src/main/java/com/someguyssoftware/treasure2/item/MimicChestItemBlock.java diff --git a/src/com/someguyssoftware/treasure2/item/ModFoodItem.java b/src/main/java/com/someguyssoftware/treasure2/item/ModFoodItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/ModFoodItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/ModFoodItem.java diff --git a/src/com/someguyssoftware/treasure2/item/ModSoupItem.java b/src/main/java/com/someguyssoftware/treasure2/item/ModSoupItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/ModSoupItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/ModSoupItem.java diff --git a/src/com/someguyssoftware/treasure2/item/PaintingItem.java b/src/main/java/com/someguyssoftware/treasure2/item/PaintingItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/PaintingItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/PaintingItem.java diff --git a/src/com/someguyssoftware/treasure2/item/PearlItem.java b/src/main/java/com/someguyssoftware/treasure2/item/PearlItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/PearlItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/PearlItem.java diff --git a/src/com/someguyssoftware/treasure2/item/PilferersLockPick.java b/src/main/java/com/someguyssoftware/treasure2/item/PilferersLockPick.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/PilferersLockPick.java rename to src/main/java/com/someguyssoftware/treasure2/item/PilferersLockPick.java diff --git a/src/com/someguyssoftware/treasure2/item/PouchItem.java b/src/main/java/com/someguyssoftware/treasure2/item/PouchItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/PouchItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/PouchItem.java diff --git a/src/com/someguyssoftware/treasure2/item/PouchType.java b/src/main/java/com/someguyssoftware/treasure2/item/PouchType.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/PouchType.java rename to src/main/java/com/someguyssoftware/treasure2/item/PouchType.java diff --git a/src/com/someguyssoftware/treasure2/item/SkeletonItem.java b/src/main/java/com/someguyssoftware/treasure2/item/SkeletonItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/SkeletonItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/SkeletonItem.java diff --git a/src/com/someguyssoftware/treasure2/item/SkeletonKey.java b/src/main/java/com/someguyssoftware/treasure2/item/SkeletonKey.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/SkeletonKey.java rename to src/main/java/com/someguyssoftware/treasure2/item/SkeletonKey.java diff --git a/src/com/someguyssoftware/treasure2/item/SpanishMossItem.java b/src/main/java/com/someguyssoftware/treasure2/item/SpanishMossItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/SpanishMossItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/SpanishMossItem.java diff --git a/src/com/someguyssoftware/treasure2/item/ThiefsLockPick.java b/src/main/java/com/someguyssoftware/treasure2/item/ThiefsLockPick.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/ThiefsLockPick.java rename to src/main/java/com/someguyssoftware/treasure2/item/ThiefsLockPick.java diff --git a/src/com/someguyssoftware/treasure2/item/TreasureChestItemBlock.java b/src/main/java/com/someguyssoftware/treasure2/item/TreasureChestItemBlock.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/TreasureChestItemBlock.java rename to src/main/java/com/someguyssoftware/treasure2/item/TreasureChestItemBlock.java diff --git a/src/com/someguyssoftware/treasure2/item/TreasureItems.java b/src/main/java/com/someguyssoftware/treasure2/item/TreasureItems.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/TreasureItems.java rename to src/main/java/com/someguyssoftware/treasure2/item/TreasureItems.java diff --git a/src/com/someguyssoftware/treasure2/item/TreasureToolItem.java b/src/main/java/com/someguyssoftware/treasure2/item/TreasureToolItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/TreasureToolItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/TreasureToolItem.java diff --git a/src/com/someguyssoftware/treasure2/item/WitherRootItem.java b/src/main/java/com/someguyssoftware/treasure2/item/WitherRootItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/WitherRootItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/WitherRootItem.java diff --git a/src/com/someguyssoftware/treasure2/item/WitherStickItem.java b/src/main/java/com/someguyssoftware/treasure2/item/WitherStickItem.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/WitherStickItem.java rename to src/main/java/com/someguyssoftware/treasure2/item/WitherStickItem.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/Charm.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/Charm.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/Charm.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/Charm.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/CharmBuilder.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/CharmBuilder.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/CharmBuilder.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/CharmBuilder.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/CharmLevel.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/CharmLevel.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/CharmLevel.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/CharmLevel.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/CharmState.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/CharmState.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/CharmState.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/CharmState.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/CharmStateFactory.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/CharmStateFactory.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/CharmStateFactory.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/CharmStateFactory.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/CharmType.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/CharmType.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/CharmType.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/CharmType.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/CharmVitals.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/CharmVitals.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/CharmVitals.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/CharmVitals.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/DecayCharm.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/DecayCharm.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/DecayCharm.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/DecayCharm.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/FullnessCharm.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/FullnessCharm.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/FullnessCharm.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/FullnessCharm.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/HealingCharm.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/HealingCharm.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/HealingCharm.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/HealingCharm.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/ICharm.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/ICharm.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/ICharm.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/ICharm.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/ICharmBuilder.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/ICharmBuilder.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/ICharmBuilder.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/ICharmBuilder.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/ICharmState.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/ICharmState.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/ICharmState.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/ICharmState.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/ICharmVitals.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/ICharmVitals.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/ICharmVitals.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/ICharmVitals.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/ICharmed.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/ICharmed.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/ICharmed.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/ICharmed.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/IlluminationCharm.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/IlluminationCharm.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/IlluminationCharm.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/IlluminationCharm.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/IlluminationCharmVitals.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/IlluminationCharmVitals.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/IlluminationCharmVitals.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/IlluminationCharmVitals.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/ShieldingCharm.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/ShieldingCharm.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/ShieldingCharm.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/ShieldingCharm.java diff --git a/src/com/someguyssoftware/treasure2/item/charm/TreasureCharms.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/TreasureCharms.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/charm/TreasureCharms.java rename to src/main/java/com/someguyssoftware/treasure2/item/charm/TreasureCharms.java diff --git a/src/com/someguyssoftware/treasure2/item/wish/IWishable.java b/src/main/java/com/someguyssoftware/treasure2/item/wish/IWishable.java similarity index 100% rename from src/com/someguyssoftware/treasure2/item/wish/IWishable.java rename to src/main/java/com/someguyssoftware/treasure2/item/wish/IWishable.java diff --git a/src/com/someguyssoftware/treasure2/lock/LockState.java b/src/main/java/com/someguyssoftware/treasure2/lock/LockState.java similarity index 100% rename from src/com/someguyssoftware/treasure2/lock/LockState.java rename to src/main/java/com/someguyssoftware/treasure2/lock/LockState.java diff --git a/src/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java similarity index 100% rename from src/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java rename to src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java diff --git a/src/com/someguyssoftware/treasure2/loot/function/CharmRandomly.java b/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly.java similarity index 100% rename from src/com/someguyssoftware/treasure2/loot/function/CharmRandomly.java rename to src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly.java diff --git a/src/com/someguyssoftware/treasure2/loot/function/SetCharms.java b/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms.java similarity index 100% rename from src/com/someguyssoftware/treasure2/loot/function/SetCharms.java rename to src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms.java diff --git a/src/com/someguyssoftware/treasure2/meta/StructureArchetype.java b/src/main/java/com/someguyssoftware/treasure2/meta/StructureArchetype.java similarity index 100% rename from src/com/someguyssoftware/treasure2/meta/StructureArchetype.java rename to src/main/java/com/someguyssoftware/treasure2/meta/StructureArchetype.java diff --git a/src/com/someguyssoftware/treasure2/meta/StructureMeta.java b/src/main/java/com/someguyssoftware/treasure2/meta/StructureMeta.java similarity index 100% rename from src/com/someguyssoftware/treasure2/meta/StructureMeta.java rename to src/main/java/com/someguyssoftware/treasure2/meta/StructureMeta.java diff --git a/src/com/someguyssoftware/treasure2/meta/StructureTheme.java b/src/main/java/com/someguyssoftware/treasure2/meta/StructureTheme.java similarity index 100% rename from src/com/someguyssoftware/treasure2/meta/StructureTheme.java rename to src/main/java/com/someguyssoftware/treasure2/meta/StructureTheme.java diff --git a/src/com/someguyssoftware/treasure2/meta/StructureType.java b/src/main/java/com/someguyssoftware/treasure2/meta/StructureType.java similarity index 100% rename from src/com/someguyssoftware/treasure2/meta/StructureType.java rename to src/main/java/com/someguyssoftware/treasure2/meta/StructureType.java diff --git a/src/com/someguyssoftware/treasure2/meta/TreasureMetaManager.java b/src/main/java/com/someguyssoftware/treasure2/meta/TreasureMetaManager.java similarity index 100% rename from src/com/someguyssoftware/treasure2/meta/TreasureMetaManager.java rename to src/main/java/com/someguyssoftware/treasure2/meta/TreasureMetaManager.java diff --git a/src/com/someguyssoftware/treasure2/model/MeshDefinitionFix.java b/src/main/java/com/someguyssoftware/treasure2/model/MeshDefinitionFix.java similarity index 100% rename from src/com/someguyssoftware/treasure2/model/MeshDefinitionFix.java rename to src/main/java/com/someguyssoftware/treasure2/model/MeshDefinitionFix.java diff --git a/src/com/someguyssoftware/treasure2/model/TreasureModels.java b/src/main/java/com/someguyssoftware/treasure2/model/TreasureModels.java similarity index 100% rename from src/com/someguyssoftware/treasure2/model/TreasureModels.java rename to src/main/java/com/someguyssoftware/treasure2/model/TreasureModels.java diff --git a/src/com/someguyssoftware/treasure2/network/CharmMessageHandlerOnClient.java b/src/main/java/com/someguyssoftware/treasure2/network/CharmMessageHandlerOnClient.java similarity index 100% rename from src/com/someguyssoftware/treasure2/network/CharmMessageHandlerOnClient.java rename to src/main/java/com/someguyssoftware/treasure2/network/CharmMessageHandlerOnClient.java diff --git a/src/com/someguyssoftware/treasure2/network/CharmMessageToClient.java b/src/main/java/com/someguyssoftware/treasure2/network/CharmMessageToClient.java similarity index 100% rename from src/com/someguyssoftware/treasure2/network/CharmMessageToClient.java rename to src/main/java/com/someguyssoftware/treasure2/network/CharmMessageToClient.java diff --git a/src/com/someguyssoftware/treasure2/network/PoisonMistMessageHandlerOnServer.java b/src/main/java/com/someguyssoftware/treasure2/network/PoisonMistMessageHandlerOnServer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/network/PoisonMistMessageHandlerOnServer.java rename to src/main/java/com/someguyssoftware/treasure2/network/PoisonMistMessageHandlerOnServer.java diff --git a/src/com/someguyssoftware/treasure2/network/PoisonMistMessageToServer.java b/src/main/java/com/someguyssoftware/treasure2/network/PoisonMistMessageToServer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/network/PoisonMistMessageToServer.java rename to src/main/java/com/someguyssoftware/treasure2/network/PoisonMistMessageToServer.java diff --git a/src/com/someguyssoftware/treasure2/network/WitherMistMessageHandlerOnServer.java b/src/main/java/com/someguyssoftware/treasure2/network/WitherMistMessageHandlerOnServer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/network/WitherMistMessageHandlerOnServer.java rename to src/main/java/com/someguyssoftware/treasure2/network/WitherMistMessageHandlerOnServer.java diff --git a/src/com/someguyssoftware/treasure2/network/WitherMistMessageToServer.java b/src/main/java/com/someguyssoftware/treasure2/network/WitherMistMessageToServer.java similarity index 100% rename from src/com/someguyssoftware/treasure2/network/WitherMistMessageToServer.java rename to src/main/java/com/someguyssoftware/treasure2/network/WitherMistMessageToServer.java diff --git a/src/com/someguyssoftware/treasure2/particle/AbstractMistParticle.java b/src/main/java/com/someguyssoftware/treasure2/particle/AbstractMistParticle.java similarity index 100% rename from src/com/someguyssoftware/treasure2/particle/AbstractMistParticle.java rename to src/main/java/com/someguyssoftware/treasure2/particle/AbstractMistParticle.java diff --git a/src/com/someguyssoftware/treasure2/particle/BillowingMistParticle.java b/src/main/java/com/someguyssoftware/treasure2/particle/BillowingMistParticle.java similarity index 100% rename from src/com/someguyssoftware/treasure2/particle/BillowingMistParticle.java rename to src/main/java/com/someguyssoftware/treasure2/particle/BillowingMistParticle.java diff --git a/src/com/someguyssoftware/treasure2/particle/IMistParticle.java b/src/main/java/com/someguyssoftware/treasure2/particle/IMistParticle.java similarity index 100% rename from src/com/someguyssoftware/treasure2/particle/IMistParticle.java rename to src/main/java/com/someguyssoftware/treasure2/particle/IMistParticle.java diff --git a/src/com/someguyssoftware/treasure2/particle/MistParticle.java b/src/main/java/com/someguyssoftware/treasure2/particle/MistParticle.java similarity index 100% rename from src/com/someguyssoftware/treasure2/particle/MistParticle.java rename to src/main/java/com/someguyssoftware/treasure2/particle/MistParticle.java diff --git a/src/com/someguyssoftware/treasure2/particle/MistTextureStitcher.java b/src/main/java/com/someguyssoftware/treasure2/particle/MistTextureStitcher.java similarity index 100% rename from src/com/someguyssoftware/treasure2/particle/MistTextureStitcher.java rename to src/main/java/com/someguyssoftware/treasure2/particle/MistTextureStitcher.java diff --git a/src/com/someguyssoftware/treasure2/particle/PoisonMistParticle.java b/src/main/java/com/someguyssoftware/treasure2/particle/PoisonMistParticle.java similarity index 100% rename from src/com/someguyssoftware/treasure2/particle/PoisonMistParticle.java rename to src/main/java/com/someguyssoftware/treasure2/particle/PoisonMistParticle.java diff --git a/src/com/someguyssoftware/treasure2/particle/WitherMistParticle.java b/src/main/java/com/someguyssoftware/treasure2/particle/WitherMistParticle.java similarity index 100% rename from src/com/someguyssoftware/treasure2/particle/WitherMistParticle.java rename to src/main/java/com/someguyssoftware/treasure2/particle/WitherMistParticle.java diff --git a/src/com/someguyssoftware/treasure2/persistence/GenDataPersistence.java b/src/main/java/com/someguyssoftware/treasure2/persistence/GenDataPersistence.java similarity index 100% rename from src/com/someguyssoftware/treasure2/persistence/GenDataPersistence.java rename to src/main/java/com/someguyssoftware/treasure2/persistence/GenDataPersistence.java diff --git a/src/com/someguyssoftware/treasure2/printer/ChestNBTPrettyPrinter.java b/src/main/java/com/someguyssoftware/treasure2/printer/ChestNBTPrettyPrinter.java similarity index 100% rename from src/com/someguyssoftware/treasure2/printer/ChestNBTPrettyPrinter.java rename to src/main/java/com/someguyssoftware/treasure2/printer/ChestNBTPrettyPrinter.java diff --git a/src/com/someguyssoftware/treasure2/proxy/ClientProxy.java b/src/main/java/com/someguyssoftware/treasure2/proxy/ClientProxy.java similarity index 100% rename from src/com/someguyssoftware/treasure2/proxy/ClientProxy.java rename to src/main/java/com/someguyssoftware/treasure2/proxy/ClientProxy.java diff --git a/src/com/someguyssoftware/treasure2/registry/ChestRegistry.java b/src/main/java/com/someguyssoftware/treasure2/registry/ChestRegistry.java similarity index 100% rename from src/com/someguyssoftware/treasure2/registry/ChestRegistry.java rename to src/main/java/com/someguyssoftware/treasure2/registry/ChestRegistry.java diff --git a/src/com/someguyssoftware/treasure2/registry/OasisRegistry.java b/src/main/java/com/someguyssoftware/treasure2/registry/OasisRegistry.java similarity index 100% rename from src/com/someguyssoftware/treasure2/registry/OasisRegistry.java rename to src/main/java/com/someguyssoftware/treasure2/registry/OasisRegistry.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/AbstractProximityTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/AbstractProximityTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/AbstractProximityTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/AbstractProximityTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/AbstractTreasureChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/AbstractTreasureChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/AbstractTreasureChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/AbstractTreasureChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/CauldronChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/CauldronChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/CauldronChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/CauldronChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/ClamChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/ClamChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/ClamChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/ClamChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/CompressorChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/CompressorChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/CompressorChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/CompressorChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/CrateChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/CrateChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/CrateChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/CrateChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/DreadPirateChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/DreadPirateChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/DreadPirateChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/DreadPirateChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/GoldSkullChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/GoldSkullChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/GoldSkullChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/GoldSkullChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/GoldStrongboxTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/GoldStrongboxTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/GoldStrongboxTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/GoldStrongboxTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/GravestoneProximitySpawnerTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/GravestoneProximitySpawnerTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/GravestoneProximitySpawnerTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/GravestoneProximitySpawnerTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/IProximityTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/IProximityTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/IProximityTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/IProximityTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/ITreasureChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/ITreasureChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/ITreasureChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/ITreasureChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/IronStrongboxTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/IronStrongboxTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/IronStrongboxTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/IronStrongboxTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/IronboundChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/IronboundChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/IronboundChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/IronboundChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/MistEmitterTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/MistEmitterTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/MistEmitterTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/MistEmitterTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/MoldyCrateChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/MoldyCrateChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/MoldyCrateChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/MoldyCrateChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/OysterChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/OysterChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/OysterChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/OysterChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/PirateChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/PirateChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/PirateChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/PirateChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/ProximitySpawnerTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/ProximitySpawnerTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/ProximitySpawnerTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/ProximitySpawnerTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/SafeTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/SafeTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/SafeTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/SafeTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/SkullChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/SkullChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/SkullChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/SkullChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/SpiderChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/SpiderChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/SpiderChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/SpiderChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/VikingChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/VikingChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/VikingChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/VikingChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/WhaleBonePirateChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/WhaleBonePirateChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/WhaleBonePirateChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/WhaleBonePirateChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/WitherChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/WitherChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/WitherChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/WitherChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/tileentity/WoodChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/WoodChestTileEntity.java similarity index 100% rename from src/com/someguyssoftware/treasure2/tileentity/WoodChestTileEntity.java rename to src/main/java/com/someguyssoftware/treasure2/tileentity/WoodChestTileEntity.java diff --git a/src/com/someguyssoftware/treasure2/wish/IWishProvider.java b/src/main/java/com/someguyssoftware/treasure2/wish/IWishProvider.java similarity index 100% rename from src/com/someguyssoftware/treasure2/wish/IWishProvider.java rename to src/main/java/com/someguyssoftware/treasure2/wish/IWishProvider.java diff --git a/src/com/someguyssoftware/treasure2/wish/IWishProviderFunction.java b/src/main/java/com/someguyssoftware/treasure2/wish/IWishProviderFunction.java similarity index 100% rename from src/com/someguyssoftware/treasure2/wish/IWishProviderFunction.java rename to src/main/java/com/someguyssoftware/treasure2/wish/IWishProviderFunction.java diff --git a/src/com/someguyssoftware/treasure2/wish/WishingWell.java b/src/main/java/com/someguyssoftware/treasure2/wish/WishingWell.java similarity index 100% rename from src/com/someguyssoftware/treasure2/wish/WishingWell.java rename to src/main/java/com/someguyssoftware/treasure2/wish/WishingWell.java diff --git a/src/com/someguyssoftware/treasure2/world/gen/structure/ITemplateGenerator.java b/src/main/java/com/someguyssoftware/treasure2/world/gen/structure/ITemplateGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/world/gen/structure/ITemplateGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/world/gen/structure/ITemplateGenerator.java diff --git a/src/com/someguyssoftware/treasure2/world/gen/structure/TemplateGenerator.java b/src/main/java/com/someguyssoftware/treasure2/world/gen/structure/TemplateGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/world/gen/structure/TemplateGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/world/gen/structure/TemplateGenerator.java diff --git a/src/com/someguyssoftware/treasure2/world/gen/structure/TemplateHolder.java b/src/main/java/com/someguyssoftware/treasure2/world/gen/structure/TemplateHolder.java similarity index 100% rename from src/com/someguyssoftware/treasure2/world/gen/structure/TemplateHolder.java rename to src/main/java/com/someguyssoftware/treasure2/world/gen/structure/TemplateHolder.java diff --git a/src/com/someguyssoftware/treasure2/world/gen/structure/TreasureDecayManager.java b/src/main/java/com/someguyssoftware/treasure2/world/gen/structure/TreasureDecayManager.java similarity index 100% rename from src/com/someguyssoftware/treasure2/world/gen/structure/TreasureDecayManager.java rename to src/main/java/com/someguyssoftware/treasure2/world/gen/structure/TreasureDecayManager.java diff --git a/src/com/someguyssoftware/treasure2/world/gen/structure/TreasureTemplateManager.java b/src/main/java/com/someguyssoftware/treasure2/world/gen/structure/TreasureTemplateManager.java similarity index 100% rename from src/com/someguyssoftware/treasure2/world/gen/structure/TreasureTemplateManager.java rename to src/main/java/com/someguyssoftware/treasure2/world/gen/structure/TreasureTemplateManager.java diff --git a/src/com/someguyssoftware/treasure2/worldgen/GemOreWorldGenerator.java b/src/main/java/com/someguyssoftware/treasure2/worldgen/GemOreWorldGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/worldgen/GemOreWorldGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/worldgen/GemOreWorldGenerator.java diff --git a/src/com/someguyssoftware/treasure2/worldgen/ITreasureWorldGenerator.java b/src/main/java/com/someguyssoftware/treasure2/worldgen/ITreasureWorldGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/worldgen/ITreasureWorldGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/worldgen/ITreasureWorldGenerator.java diff --git a/src/com/someguyssoftware/treasure2/worldgen/OasisWorldGenerator.java b/src/main/java/com/someguyssoftware/treasure2/worldgen/OasisWorldGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/worldgen/OasisWorldGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/worldgen/OasisWorldGenerator.java diff --git a/src/com/someguyssoftware/treasure2/worldgen/SubmergedChestWorldGenerator.java b/src/main/java/com/someguyssoftware/treasure2/worldgen/SubmergedChestWorldGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/worldgen/SubmergedChestWorldGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/worldgen/SubmergedChestWorldGenerator.java diff --git a/src/com/someguyssoftware/treasure2/worldgen/SurfaceChestWorldGenerator.java b/src/main/java/com/someguyssoftware/treasure2/worldgen/SurfaceChestWorldGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/worldgen/SurfaceChestWorldGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/worldgen/SurfaceChestWorldGenerator.java diff --git a/src/com/someguyssoftware/treasure2/worldgen/WellWorldGenerator.java b/src/main/java/com/someguyssoftware/treasure2/worldgen/WellWorldGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/worldgen/WellWorldGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/worldgen/WellWorldGenerator.java diff --git a/src/com/someguyssoftware/treasure2/worldgen/WitherTreeWorldGenerator.java b/src/main/java/com/someguyssoftware/treasure2/worldgen/WitherTreeWorldGenerator.java similarity index 100% rename from src/com/someguyssoftware/treasure2/worldgen/WitherTreeWorldGenerator.java rename to src/main/java/com/someguyssoftware/treasure2/worldgen/WitherTreeWorldGenerator.java From e98b09ef86a378b575544a8be091196f7c6836d4 Mon Sep 17 00:00:00 2001 From: gottsch Date: Wed, 2 Dec 2020 22:08:30 -0500 Subject: [PATCH 05/20] basic loot table file management setup --- .../someguyssoftware/treasure2/Treasure.java | 5 + .../eventhandler/WorldEventHandler.java | 38 ++ .../treasure2/loot/LootPoolShell.java | 42 ++ .../treasure2/loot/LootTableCategory.java | 18 + .../treasure2/loot/LootTableMaster2.java | 563 ++++++++++++++++++ .../treasure2/loot/LootTableShell.java | 47 ++ .../loot/TreasureLootTableMaster2.java | 165 +++++ .../base/chests/common/base_table.json | 116 ++++ 8 files changed, 994 insertions(+) create mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/LootPoolShell.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/LootTableCategory.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java create mode 100644 src/main/resources/loot_tables/treasure2/base/chests/common/base_table.json diff --git a/src/main/java/com/someguyssoftware/treasure2/Treasure.java b/src/main/java/com/someguyssoftware/treasure2/Treasure.java index 6aef05bff..a402876fe 100644 --- a/src/main/java/com/someguyssoftware/treasure2/Treasure.java +++ b/src/main/java/com/someguyssoftware/treasure2/Treasure.java @@ -48,7 +48,9 @@ import com.someguyssoftware.treasure2.eventhandler.WorldEventHandler; import com.someguyssoftware.treasure2.item.PaintingItem; import com.someguyssoftware.treasure2.item.TreasureItems; +import com.someguyssoftware.treasure2.loot.LootTableMaster2; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2; import com.someguyssoftware.treasure2.loot.function.CharmRandomly; import com.someguyssoftware.treasure2.loot.function.SetCharms; import com.someguyssoftware.treasure2.meta.TreasureMetaManager; @@ -125,6 +127,8 @@ public class Treasure extends AbstractMod { // loot tables management public static TreasureLootTableMaster LOOT_TABLES; + public static TreasureLootTableMaster2 LOOT_TABLE_MASTER; + /* * Treasure Creative Tab Must be initialized before any registry events * so that it is available to assign to blocks and items. @@ -259,6 +263,7 @@ public void init(FMLInitializationEvent event) { // add the loot table managers LOOT_TABLES = new TreasureLootTableMaster(Treasure.instance, "", "loot_tables"); + LOOT_TABLE_MASTER = new TreasureLootTableMaster2(Treasure.instance); TEMPLATE_MANAGER = new TreasureTemplateManager(Treasure.instance, "/structures", FMLCommonHandler.instance().getDataFixer()); diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java index 0f17b2e6e..81221b391 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java @@ -3,13 +3,17 @@ */ package com.someguyssoftware.treasure2.eventhandler; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Map.Entry; +import java.util.Optional; import com.someguyssoftware.gottschcore.mod.IMod; import com.someguyssoftware.gottschcore.world.WorldInfo; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.config.TreasureConfig; import com.someguyssoftware.treasure2.enums.WorldGeneratorType; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.persistence.GenDataPersistence; import com.someguyssoftware.treasure2.registry.ChestRegistry; import com.someguyssoftware.treasure2.worldgen.GemOreWorldGenerator; @@ -19,9 +23,12 @@ import com.someguyssoftware.treasure2.worldgen.WellWorldGenerator; import com.someguyssoftware.treasure2.worldgen.WitherTreeWorldGenerator; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraft.world.storage.MapStorage; +import net.minecraft.world.storage.loot.LootTable; +import net.minecraft.world.storage.loot.LootTableList; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.IWorldGenerator; import net.minecraftforge.fml.common.Loader; @@ -54,6 +61,32 @@ public void onWorldLoad(WorldEvent.Load event) { // Treasure.logger.debug("server event"); WorldServer world = (WorldServer) event.getWorld(); // TreasureLootTables.init(world); + + /////////////////////////// + /// New Loot Table Master + ///============ + // called once to initiate world-level properties in the LootTableMaster + Treasure.LOOT_TABLE_MASTER.init(world); + // register mod's loot tables with the LootTableMaster + Treasure.LOOT_TABLE_MASTER.register(mod.getId()); + + // TEST /// + ResourceLocation loc = new ResourceLocation("treasure2", "test/one"); + Optional lootTableShell = Treasure.LOOT_TABLE_MASTER.loadLootTable(Treasure.LOOT_TABLE_MASTER.getWorldDataBaseFolder(), loc); + if (lootTableShell.isPresent()) { + Treasure.logger.debug("Found world data loot table with version -> {}, # of pools -> {}", lootTableShell.get().getVersion(), lootTableShell.get().getPools().size()); + // register it with MC + ResourceLocation newLoc = LootTableList.register(loc); + Treasure.logger.debug("registered world data loot table -> {}", newLoc); + LootTable table = world.getLootTableManager().getLootTableFromLocation(newLoc); + Treasure.logger.debug("got the loot table -> {}", table); + } + else { + Treasure.logger.debug("Couldn't find world data loot table -> {}", loc); + } + // END TEST /// + /////////////////////////// + Treasure.LOOT_TABLES.init(world); Treasure.LOOT_TABLES.register(getMod().getId()); // register any foreign mod loot tables @@ -85,6 +118,11 @@ public void onWorldLoad(WorldEvent.Load event) { } } + @SubscribeEvent + public void onWorldUnLoad(WorldEvent.Unload event) { + // TODO clear LOOT_TABLES_MASTER + } + /** * @return the mod */ diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootPoolShell.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootPoolShell.java new file mode 100644 index 000000000..000e54747 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/loot/LootPoolShell.java @@ -0,0 +1,42 @@ +/** + * + */ +package com.someguyssoftware.treasure2.loot; + +import net.minecraft.world.storage.loot.RandomValueRange; + +/** + * @author Mark Gottschling on Dec 1, 2020 + * + */ +public class LootPoolShell { + private RandomValueRange rolls; + private RandomValueRange bonusRolls; + private String name; + + public LootPoolShell() {} + + public RandomValueRange getRolls() { + return rolls; + } + public void setRolls(RandomValueRange rolls) { + this.rolls = rolls; + } + public RandomValueRange getBonusRolls() { + return bonusRolls; + } + public void setBonusRolls(RandomValueRange bonusRolls) { + this.bonusRolls = bonusRolls; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "LootPoolShell [rolls=" + rolls + ", bonusRolls=" + bonusRolls + ", name=" + name + "]"; + } +} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableCategory.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableCategory.java new file mode 100644 index 000000000..ca5a1f286 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableCategory.java @@ -0,0 +1,18 @@ +/** + * + */ +package com.someguyssoftware.treasure2.loot; + +/** + * @author Mark Gottschling on Dec 2, 2020 + * + */ +public enum LootTableCategory { + GENERAL, + ITEM, + ARMOR, + TOOL, + FOOD, + POTION, + UNKNOWN; +} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java new file mode 100644 index 000000000..e1e915bba --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java @@ -0,0 +1,563 @@ +/** + * + */ +package com.someguyssoftware.treasure2.loot; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Stream; + +import org.apache.commons.io.FilenameUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.google.common.io.Resources; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonParseException; +import com.someguyssoftware.gottschcore.GottschCore; +import com.someguyssoftware.gottschcore.loot.LootTableMaster; +import com.someguyssoftware.gottschcore.mod.IMod; +import com.someguyssoftware.gottschcore.version.BuildVersion; +import com.someguyssoftware.gottschcore.version.VersionChecker; +import com.someguyssoftware.treasure2.Treasure; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraft.world.storage.loot.LootTableManager; +import net.minecraft.world.storage.loot.RandomValueRange; + +/** + * @author Mark Gottschling on Dec 1, 2020 + * + */ +public class LootTableMaster2 { + public static Logger LOGGER = LogManager.getLogger(Treasure.logger.getName()); + + public static final String LOOT_TABLES_FOLDER = "loot_tables"; + private static final String BASE_FOLDER = "base"; + private static final String INJECT_FOLDER = "inject"; + + private static final Gson GSON_INSTANCE = (new GsonBuilder()) + .registerTypeAdapter(RandomValueRange.class, new RandomValueRange.Serializer()).create(); + + private final IMod mod; + private File worldDataBaseFolder; + + /** + * + */ + public LootTableMaster2(IMod mod) { + this.mod = mod; + } + + /** + * From WorldServer.class: this.lootTable = new LootTableManager(new File(new + * File(this.saveHandler.getWorldDirectory(), "data"), "loot_tables")); + */ + public LootTableMaster2(IMod mod, File folder) { + this.mod = mod; + this.worldDataBaseFolder = folder; + } + + /** + * Call in WorldEvent.Load event handler. + * @param world + */ + public void init(WorldServer world) { + Path path = Paths.get(world.getSaveHandler().getWorldDirectory().getPath(), "data", "loot_tables"); + Treasure.logger.debug("path to world data loot tables -> {}", path.toAbsolutePath()); + setWorldDataBaseFolder(path.toFile()); + } + + /** + * CREATES CONFIG FOLDERS/RESOURCES - on mod/manager creation + * Creates all the necessary folder and resources before actual loading of loot tables. + * Call in your @Mod class in preInt() or int(). + * + * @param resourceRootPath + * @param modID + */ + public void buildAndExpose(String resourceRootPath, String modID, List locations) { + GottschCore.logger.debug("loot table folder locations -> {}", locations); + // create paths to custom loot tables if they don't exist + for (String location : locations) { + GottschCore.logger.debug("buildAndExpose location -> {}", location); + createLootTableFolder(modID, location); + exposeLootTable(resourceRootPath, modID, location); + } + } + + /** + * ONE STOP SHOP to tell where the resource is and to add to the maps and to register with minecraft + * + * Call in WorldEvent.Load event handler. + * Overide this method if you have a different cache mechanism. + * @param location + */ + public void register(WorldServer world, String modID, List locations) { + // TODO copy files from config location to world data location if not there already + + + for (String location : locations) { + // get loot table files as ResourceLocations from the world data location + List locs = getLootTablesResourceLocations(modID, location); + } + + // register it with MC +// ResourceLocation newLoc = LootTableList.register(loc); + + // TODO finish + } + + /** + * + * @param modID + * @param location + */ + protected void createLootTableFolder(String modID, String location) { + // ensure that the requried properties (modID) is not null + if (modID == null || modID.isEmpty()) { + modID = getMod().getId(); + } + + /* + * build a path to the specified location + * ie ../[CONFIG FOLDER]/[MODID]/[LOOT_TABLES]/[location] + */ + Path configPath = Paths.get(getMod().getConfig().getConfigFolder()); + Path folder = Paths.get(configPath.toString(), modID, LOOT_TABLES_FOLDER, ((location != null && !location.isEmpty()) ? /*(location + "/")*/location : "")).toAbsolutePath(); + + if (Files.notExists(folder)) { + GottschCore.logger.debug("loot tables folder \"{}\" will be created.", folder.toString()); + try { + Files.createDirectories(folder); + + } catch (IOException e) { + GottschCore.logger.warn("Unable to create loot tables folder \"{}\"", folder.toString()); + } + } + } + + /** + * + * @param modID + * @param location + */ + protected void createWorldDataLootTableFolder(String modID, String location) { + // ensure that the requried properties (modID) is not null + if (modID == null || modID.isEmpty()) { + modID = getMod().getId(); + } + + /* + * build a path to the specified location + * ie ../[WORLD DATA]/[LOOT_TABLES]/[MOD ID]/[location] + */ + Path worldDataFilePath = Paths.get(getWorldDataBaseFolder().toString(), modID, location).toAbsolutePath(); + + if (Files.notExists(worldDataFilePath)) { + GottschCore.logger.debug("loot tables folder \"{}\" will be created.", worldDataFilePath.toString()); + try { + Files.createDirectories(worldDataFilePath); + + } catch (IOException e) { + GottschCore.logger.warn("Unable to create world data loot tables folder \"{}\"", worldDataFilePath.toString()); + } + } + } + + /** + * + * @param modID + * @param location + */ + protected void exposeLootTable(String resourceRootPath, String modID, String location) { + // ensure that the requried properties are not null + if (modID == null || modID.isEmpty()) + modID = getMod().getId(); + location = (location != null && !location.equals("")) ? (location + "/") : ""; + + Stream walk = null; + FileSystem fs = getResourceAsFileSystem(resourceRootPath, modID, location); + if (fs == null) + return; + + try { + // get the base path of the resource + Path resourceBasePath = fs.getPath(resourceRootPath, modID, location); + Path folder = Paths.get(getMod().getConfig().getConfigFolder(), modID, LOOT_TABLES_FOLDER, location).toAbsolutePath(); + + boolean isFirst = true; + // proces all the files in the folder + walk = Files.walk(resourceBasePath, 1); + for (Iterator it = walk.iterator(); it.hasNext();) { + Path resourceFilePath = it.next(); + // String tableName = resourceFilePath.getFileName().toString(); + GottschCore.logger.debug("mod loot_table -> {}", resourceFilePath.toString()); + // check the first file, which is actually the given directory itself + if (isFirst) { + // create the file system folder if it doesn't exist + if (Files.notExists(folder)) { + createLootTableFolder(modID, location); + } + } else { + if (Files.isDirectory(resourceFilePath)) { + GottschCore.logger.debug("resource is a folder -> {}", resourceFilePath.toString()); + continue; + } + + // test if file exists on the file system + Path fileSystemFilePath = Paths.get(folder.toString(), resourceFilePath.getFileName().toString()).toAbsolutePath(); + GottschCore.logger.debug("config loot table path -> {}", fileSystemFilePath.toString()); + + if (Files.notExists(fileSystemFilePath)) { + // copy from resource/classpath to file path + copyResourceToFileSystem(resourceFilePath, fileSystemFilePath); + } + else { + boolean isCurrent = false; + try { + isCurrent = isFileSystemVersionCurrent(resourceFilePath, fileSystemFilePath); + } + catch(Exception e) { + GottschCore.logger.warn(e.getMessage(), e); + continue; + } + + GottschCore.logger.error("is file system (config) loot table current -> {}", isCurrent); + if (!isCurrent) { + Files.move( + fileSystemFilePath, + Paths.get(folder.toString(), resourceFilePath.getFileName().toString() + ".bak").toAbsolutePath(), + StandardCopyOption.REPLACE_EXISTING); + copyResourceToFileSystem(resourceFilePath, fileSystemFilePath); + } + } + } + isFirst = false; + } + } catch (Exception e) { + GottschCore.logger.error("error:", e); + } finally { + // close the stream + if (walk != null) { + walk.close(); + } + } + + // close the file system + if (fs != null && fs.isOpen()) { + try { + fs.close(); + } catch (IOException e) { + GottschCore.logger.debug("An error occurred attempting to close the FileSystem:", e); + } + } + } + + /** + * + * @param resourceFilePath + * @param fileSystemFilePath + */ + private void copyResourceToFileSystem(Path resourceFilePath, Path fileSystemFilePath) { + InputStream is = LootTableMaster.class.getResourceAsStream(resourceFilePath.toString()); + try (FileOutputStream fos = new FileOutputStream(fileSystemFilePath.toFile())) { + byte[] buf = new byte[2048]; + int r; + while ((r = is.read(buf)) != -1) { + fos.write(buf, 0, r); + } + } catch (IOException e) { + GottschCore.logger.error("Error exposing resource to file system.", e); + } + } + + /** + * + * @param configFilePath + * @param worldDataFilePath + * @return + */ + protected boolean isWorldDataVersionCurrent(Path configFilePath, Path worldDataFilePath) { + boolean result = true; + GottschCore.logger.debug("Verifying the most current version for the world data loot table -> {} ...", worldDataFilePath.getFileName()); + + // config loot table + String configJson; + try { + configJson = com.google.common.io.Files.toString(configFilePath.toFile(), StandardCharsets.UTF_8); + } + catch (IOException e) { + LOGGER.warn("Couldn't load config loot table from {}", configFilePath.toString(), e); + return false; + } + + // world data config table + String worldDataJson; + try { + worldDataJson = com.google.common.io.Files.toString(worldDataFilePath.toFile(), StandardCharsets.UTF_8); + } + catch (IOException e) { + LOGGER.warn("Couldn't load world data loot table from {}", worldDataFilePath.toString(), e); + return false; + } + + LootTableShell configLootTable = loadLootTable(configJson); + LootTableShell worldDataLootTable = loadLootTable(worldDataJson); + + GottschCore.logger.debug("\n\t...config loot table -> {}\n\t...version -> {}\n\t...world data loot table -> {}\n\t...version -> {}", + configFilePath.toString(), + configLootTable.getVersion(), + worldDataFilePath.toString(), + worldDataLootTable.getVersion()); + + // compare versions + if (configLootTable != null && worldDataLootTable != null) { + BuildVersion configVersion = new BuildVersion(configLootTable.getVersion()); + BuildVersion worldDataVersion = new BuildVersion(worldDataLootTable.getVersion()); + result = VersionChecker.checkVersion(configVersion, worldDataVersion); // if 1st > 2nd, then false; + } + + // compare modified dates + if (result && configFilePath.toFile().lastModified() > worldDataFilePath.toFile().lastModified()) { + result = false; + } + return result; + } + + /** + * + * @param resourceFilePath + * @param fileSystemFilePath + * @return + * @throws Exception + */ + protected boolean isFileSystemVersionCurrent(Path resourceFilePath, Path fileSystemFilePath) throws Exception { + boolean result = true; + GottschCore.logger.debug("Verifying the most current version for the loot table -> {} ...", fileSystemFilePath.getFileName()); + + // file system loot table - can't load as a resource at this location + String configJson; + try { + configJson = com.google.common.io.Files.toString(fileSystemFilePath.toFile(), StandardCharsets.UTF_8); + } + catch (IOException e) { + LOGGER.warn("Couldn't load config loot table from {}", fileSystemFilePath.toString(), e); + return false; + } + LootTableShell fsLootTable = loadLootTable(configJson); + + // turn file path into a resource location + ResourceLocation loc = new ResourceLocation(getMod().getId(), resourceFilePath.toString().replace(".json", "")); + + // jar resource loot table + URL url = LootTableManager.class.getResource(resourceFilePath.toString()); + if (url == null) { + GottschCore.logger.debug("Unable to get resource -> {}", resourceFilePath.toString()); + return false; + } + + String resourceJson; + try { + resourceJson = Resources.toString(url, StandardCharsets.UTF_8); + } catch (IOException e) { + // TODO make custom exception + throw new Exception(String.format("Couldn't load loot table %s from %s", resourceFilePath, url), e); + } + + LootTableShell resourceLootTable = null; + try { + resourceLootTable = loadLootTable(resourceJson); + } catch (IllegalArgumentException | JsonParseException e) { + // TODO make custom exception + throw new Exception(String.format("Couldn't load loot table %s from %s", resourceFilePath, url), e); + } + + GottschCore.logger.debug("\n\t...file system loot table -> {}\n\t...version -> {}\n\t...resource loot table -> {}\n\t...version -> {}", + fileSystemFilePath.toString(), + fsLootTable.getVersion(), + loc.toString(), + resourceLootTable.getVersion()); + + // compare versions + if (resourceLootTable != null && fsLootTable != null) { + BuildVersion resourceVersion = new BuildVersion(resourceLootTable.getVersion()); + BuildVersion fsVersion = new BuildVersion(fsLootTable.getVersion()); + result = VersionChecker.checkVersion(resourceVersion, fsVersion); // if 1st > 2nd, then false; + } + return result; + } + + /** + * + * @param modID + * @param location + * @return + */ + protected FileSystem getResourceAsFileSystem(String resourceRootPath, String modID, String location) { + FileSystem fs = null; + Map env = new HashMap<>(); + URI uri = null; + + // get the asset resource folder that is unique to this mod + resourceRootPath = "/" + resourceRootPath.replaceAll("^/|/$", "") + "/"; + URL url = GottschCore.class.getResource(resourceRootPath + modID + "/" + location); + if (url == null) { + GottschCore.logger.error("Unable to locate resource {}", resourceRootPath + modID + "/" + location); + return null; + } + + // convert to a uri + try { + uri = url.toURI(); + } catch (URISyntaxException e) { + GottschCore.logger.error("An error occurred during loot table processing:", e); + return null; + } + + // split the uri into 2 parts - jar path and folder path within jar + String[] array = uri.toString().split("!"); + try { + fs = FileSystems.newFileSystem(URI.create(array[0]), env); + } catch (IOException e) { + GottschCore.logger.error("An error occurred during loot table processing:", e); + return null; + } + + return fs; + } + + /** + * Gather all json files at location as a ResourceLocation list. + * @param modIDIn + * @param locationIn + * @return + */ + public List getLootTablesResourceLocations(String modIDIn, String locationIn) { + // ensure that the requried properties are not null + final String modID = (modIDIn == null || modIDIn.isEmpty()) ? getMod().getId() : modIDIn; + final String location= (locationIn != null && !locationIn.equals("")) ? (locationIn + "/") : ""; + + List locs = new ArrayList<>(); + Path path = Paths.get(getWorldDataBaseFolder().getPath(), modID, location).toAbsolutePath(); + + GottschCore.logger.debug("Path to world data loot table -> {}", path.toString()); + // check if path/folder exists + if (Files.notExists(path)) { + GottschCore.logger.debug("Unable to locate -> {}", path.toString()); + return locs; + } + + try { + Files.walk(path).filter(Files::isRegularFile).forEach(f -> { + GottschCore.logger.debug("World data loot table file -> {}", f.toAbsolutePath().toString()); + /* + * only add .json files. (not .bak or anything else) + */ + if (FilenameUtils.getExtension(f.getFileName().toString()).equals("json")) { + ResourceLocation loc = + new ResourceLocation(modID + ":" + location + f.getFileName().toString().replace(".json", "")); + GottschCore.logger.debug("Resource location -> {}", loc); + locs.add(loc); + } + }); + } catch (IOException e) { + GottschCore.logger.error("Error processing custom loot table:", e); + } + return locs; + } + + /** + * + * @param json + * @return + */ + public LootTableShell loadLootTable(String json) throws IllegalArgumentException, JsonParseException { + return GSON_INSTANCE.fromJson(json, LootTableShell.class); + } + + /** + * TODO change File path to Path path and File baseFolder to Path baseFolder + * @param resource + * @return + */ + public Optional loadLootTable(File folder, ResourceLocation resource) { + + if (getWorldDataBaseFolder() == null) { + return Optional.empty(); + } + else { +// File lootTableFile = new File(new File(getWorldDataBaseFolder(), resource.getResourceDomain()), +// resource.getResourcePath() + ".json"); + + File lootTableFile = Paths.get(folder.getPath(), resource.getResourceDomain(), resource.getResourcePath() + ".json").toFile(); + LOGGER.debug("Attempting to load loot table {} from {}", resource, lootTableFile); + + if (lootTableFile.exists()) { + if (lootTableFile.isFile()) { + String json; + try { + json = com.google.common.io.Files.toString(lootTableFile, StandardCharsets.UTF_8); + } + catch (IOException e) { + LOGGER.warn("Couldn't load loot table {} from {}", resource, lootTableFile, e); + return Optional.empty(); + } + + try { + return Optional.of(loadLootTable(json)); + } + catch (IllegalArgumentException | JsonParseException e) { + LOGGER.error("Couldn't load loot table {} from {}", resource, lootTableFile, e); + return Optional.empty(); + } + } + else { + LOGGER.warn("Expected to find loot table {} at {} but it was a folder.", resource, lootTableFile); + return Optional.empty(); + } + } + else { + LOGGER.warn("Expected to find loot table {} at {} but it doesn't exist.", resource, lootTableFile); + return Optional.empty(); + } + } + } + + public File getWorldDataBaseFolder() { + return worldDataBaseFolder; + } + + public void setWorldDataBaseFolder(File baseFolder) { + this.worldDataBaseFolder = baseFolder; + } + + public IMod getMod() { + return mod; + } + + public Gson getGsonInstance() { + return GSON_INSTANCE; + } +} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java new file mode 100644 index 000000000..f3e7b36f8 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java @@ -0,0 +1,47 @@ +/** + * + */ +package com.someguyssoftware.treasure2.loot; + +import java.util.List; + +/** + * @author Mark Gottschling on Dec 1, 2020 + * + */ +public class LootTableShell { + private String version; + private List categories; + private List pools; + + public LootTableShell() {} + + public List getPools() { + return pools; + } + + public void setPools(List pools) { + this.pools = pools; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public List getCategories() { + return categories; + } + + public void setCategories(List categories) { + this.categories = categories; + } + + @Override + public String toString() { + return "LootTableShell [version=" + version + ", categories=" + categories + "]"; + } +} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java new file mode 100644 index 000000000..364d4b394 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java @@ -0,0 +1,165 @@ +/** + * + */ +package com.someguyssoftware.treasure2.loot; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Table; +import com.someguyssoftware.gottschcore.GottschCore; +import com.someguyssoftware.gottschcore.mod.IMod; +import com.someguyssoftware.treasure2.Treasure; +import com.someguyssoftware.treasure2.enums.Rarity; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.loot.LootTableList; + +/** + * @author Mark Gottschling on Dec 2, 2020 + * + */ +public class TreasureLootTableMaster2 extends LootTableMaster2 { + private static final String CUSTOM_LOOT_TABLES_RESOURCE_PATH = "/loot_tables/"; + public static final String CUSTOM_LOOT_TABLE_KEY = "CUSTOM"; + /* + * relative location of chest loot tables - in resource path or file system + */ + private static final List BASE_CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( + "base/chests/common" + ); + + /* + * Guava Table of LootTable ResourceLocations based on LootTableManager-key and Rarity + */ + private final Table> CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE = HashBasedTable.create(); + + /* + * Guava Table of LootTables based on LootTableManager-key and Rarity + */ + private final Table> CHEST_LOOT_TABLES_TABLE = HashBasedTable.create(); + + /** + * + * @param mod + */ + public TreasureLootTableMaster2(IMod mod) { + super(mod); + buildAndExpose(Treasure.MODID); + + // initialize the maps + for (Rarity r : Rarity.values()) { + CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.put(CUSTOM_LOOT_TABLE_KEY, r, new ArrayList()); + CHEST_LOOT_TABLES_TABLE.put(CUSTOM_LOOT_TABLE_KEY, r, new ArrayList()); + } + } + + /** + * + * @param modID + */ + private void buildAndExpose(String modID) { + buildAndExpose(CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, BASE_CHEST_LOOT_TABLE_FOLDER_LOCATIONS); + } + + /** + * Call in WorldEvent.Load event handler. + * Overide this method if you have a different cache mechanism. + * @param world + * @param modID + */ + public void register(String modID) { + + for (String location : BASE_CHEST_LOOT_TABLE_FOLDER_LOCATIONS) { + // create the destination folders + createWorldDataLootTableFolder(modID, location); + // copy from config location to world data location + moveLootTable(modID, location); + + // get loot table files as ResourceLocations from the file system location + List resourceLocations = getLootTablesResourceLocations(modID, location); + // load each ResourceLocation as LootTable and map it. + for (ResourceLocation resourceLocation : resourceLocations) { + Path path = Paths.get(resourceLocation.getResourcePath()); + Treasure.logger.debug("path to resource loc -> {}", path.toString()); + // map the loot table resource location + Rarity key = Rarity.valueOf(path.getName(path.getNameCount()-2).toString().toUpperCase()); + // add to resourcemap + CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(resourceLocation); + // create loot table + Optional lootTable = loadLootTable(getWorldDataBaseFolder(), resourceLocation); + if (lootTable.isPresent()) { + // add loot table to map + CHEST_LOOT_TABLES_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(lootTable.get()); + Treasure.logger.debug("tabling loot table: {} {} -> {}", CUSTOM_LOOT_TABLE_KEY, key, resourceLocation); + } + + // register it with MC + ResourceLocation newLoc = LootTableList.register(resourceLocation); + } + } + } + + /** + * + * @param modID + * @param location + */ + protected void moveLootTable(String modID, String location) { + Path configFilePath = Paths.get(getMod().getConfig().getConfigFolder(), modID, LOOT_TABLES_FOLDER, location).toAbsolutePath(); + Path worldDataFilePath = Paths.get(getWorldDataBaseFolder().getParent(), LOOT_TABLES_FOLDER, modID, location).toAbsolutePath(); + + // get all the files under the path + Set fileList = new HashSet<>(); + try { + Files.walkFileTree(configFilePath, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) + throws IOException { + if (!Files.isDirectory(file)) { + fileList.add(file.getFileName().toString()); + + Path destinationFilePath = worldDataFilePath.resolve(file.getFileName()); + if (Files.notExists(destinationFilePath)) { + // copy from resource/classpath to file path + try { + Files.copy(file, destinationFilePath, StandardCopyOption.REPLACE_EXISTING); + } + catch(IOException e ) { + GottschCore.logger.error(String.format("could not copy file %s to %s", file.toString(), destinationFilePath.toString()), e); + } + } + else { + boolean isCurrent = isWorldDataVersionCurrent(file, destinationFilePath); + GottschCore.logger.error("is file system (world data) loot table current -> {}", isCurrent); + if (!isCurrent) { + Files.move( + destinationFilePath, + Paths.get(destinationFilePath.getFileName().toString() + ".bak").toAbsolutePath(), + StandardCopyOption.REPLACE_EXISTING); + Files.copy(file, destinationFilePath); + } + } + } + return FileVisitResult.CONTINUE; + } + }); + } catch (IOException e) { + Treasure.logger.error(String.format("an errored while file walking the location -> %s:", configFilePath), e); + return; + } + } +} diff --git a/src/main/resources/loot_tables/treasure2/base/chests/common/base_table.json b/src/main/resources/loot_tables/treasure2/base/chests/common/base_table.json new file mode 100644 index 000000000..5496b147b --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/base/chests/common/base_table.json @@ -0,0 +1,116 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "common_keys", + "rolls": 1, + "entries": [ + { + "entryName": "wood_key", + "type": "item", + "name": "treasure2:wood_key", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "stone_key", + "type": "item", + "name": "treasure2:stone_key", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "pilferers_lock_pick", + "type": "item", + "name": "treasure2:pilferers_lock_pick", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "iron_key", + "type": "item", + "name": "treasure2:iron_key", + "weight": 10 + }, + { + "entryName": "thiefs_lock_pick", + "type": "item", + "name": "treasure2:thiefs_lock_pick", + "weight": 10 + } + ] + }, + { + "name": "common_treasure", + "rolls": 1, + "entries": [ + { + "entryName": "silver_coin", + "type": "item", + "name": "treasure2:silver_coin", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "name": "common_charms", + "rolls": 1, + "entries": [ + { + "entryName": "charm1", + "type": "item", + "name": "treasure2:charmed_silver_coin", + "weight": 1, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.2 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "lesser_healing", + "durable_shielding" + ] + } + ] + } + ] + } + ] +} \ No newline at end of file From 26922642e995a68cb57eeea404c88177cd1c2b6d Mon Sep 17 00:00:00 2001 From: gottsch Date: Thu, 3 Dec 2020 17:59:41 -0500 Subject: [PATCH 06/20] fleshing out new loot table management --- .../treasure2/client/gui/GuiHandler.java | 4 + .../eventhandler/WorldEventHandler.java | 19 +- .../treasure2/loot/ILootTableMaster.java | 40 +++ .../treasure2/loot/LootTableMaster2.java | 79 +++++- .../loot/TreasureLootTableMaster2.java | 266 ++++++++++++++---- .../chests/common/general_chest.json | 13 +- .../treasure2/inject/common/items.json | 183 ++++++++++++ .../treasure2/pools/items/common.json | 182 ++++++++++++ .../treasure/common.json} | 0 .../treasure2/pools/treasure/epic.json | 204 ++++++++++++++ .../treasure2/pools/treasure/epic_charms.json | 116 ++++++++ .../treasure2/pools/treasure/rare.json | 179 ++++++++++++ .../treasure2/pools/treasure/rare_charms.json | 142 ++++++++++ .../treasure2/pools/treasure/scarce.json | 201 +++++++++++++ .../pools/treasure/scarce_charms.json | 117 ++++++++ .../treasure2/pools/treasure/uncommon.json | 152 ++++++++++ .../pools/treasure/uncommon_charms.json | 76 +++++ 17 files changed, 1889 insertions(+), 84 deletions(-) create mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/ILootTableMaster.java create mode 100644 src/main/resources/loot_tables/treasure2/inject/common/items.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/items/common.json rename src/main/resources/loot_tables/treasure2/{base/chests/common/base_table.json => pools/treasure/common.json} (100%) create mode 100644 src/main/resources/loot_tables/treasure2/pools/treasure/epic.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/treasure/rare.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/treasure/scarce.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/treasure/uncommon.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json diff --git a/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java index 1f502d69b..d8bb0b2cf 100644 --- a/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java @@ -44,6 +44,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootPool; import net.minecraftforge.fml.common.network.IGuiHandler; /** @@ -86,6 +87,9 @@ public Object getServerGuiElement(int ID, EntityPlayer player, World world, int IChestGenerator chestGenerator = chestTileEntity.getGenerationContext().getChestGeneratorType().getChestGenerator(); // logger.debug("chest gen -> {}", chestTileEntity.getGenerationContext().getChestGeneratorType().getChestGenerator().getClass().getSimpleName()); + // TODO this loot selection will change + // + // TODO these details will be hidden behind another method // select a loot table LootTable lootTable = chestGenerator.selectLootTable(Random::new, chestTileEntity.getGenerationContext().getLootRarity()); if (lootTable == null) { diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java index 81221b391..d8a5b7613 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java @@ -3,8 +3,6 @@ */ package com.someguyssoftware.treasure2.eventhandler; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.Map.Entry; import java.util.Optional; @@ -16,21 +14,13 @@ import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.persistence.GenDataPersistence; import com.someguyssoftware.treasure2.registry.ChestRegistry; -import com.someguyssoftware.treasure2.worldgen.GemOreWorldGenerator; import com.someguyssoftware.treasure2.worldgen.ITreasureWorldGenerator; -import com.someguyssoftware.treasure2.worldgen.SubmergedChestWorldGenerator; -import com.someguyssoftware.treasure2.worldgen.SurfaceChestWorldGenerator; -import com.someguyssoftware.treasure2.worldgen.WellWorldGenerator; -import com.someguyssoftware.treasure2.worldgen.WitherTreeWorldGenerator; import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; import net.minecraft.world.WorldServer; -import net.minecraft.world.storage.MapStorage; import net.minecraft.world.storage.loot.LootTable; import net.minecraft.world.storage.loot.LootTableList; import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.fml.common.IWorldGenerator; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -78,7 +68,7 @@ public void onWorldLoad(WorldEvent.Load event) { // register it with MC ResourceLocation newLoc = LootTableList.register(loc); Treasure.logger.debug("registered world data loot table -> {}", newLoc); - LootTable table = world.getLootTableManager().getLootTableFromLocation(newLoc); + LootTable table = world.getLootTableManager().getLootTableFromLocation(newLoc); Treasure.logger.debug("got the loot table -> {}", table); } else { @@ -87,14 +77,19 @@ public void onWorldLoad(WorldEvent.Load event) { // END TEST /// /////////////////////////// + // TODO deprecated calls Treasure.LOOT_TABLES.init(world); Treasure.LOOT_TABLES.register(getMod().getId()); + + // TODO deprecated system // register any foreign mod loot tables for (String foreignModID : TreasureConfig.FOREIGN_MODS.enableForeignModIDs) { if (Loader.isModLoaded(foreignModID)) { Treasure.LOOT_TABLES.register(foreignModID); } } + + // register files with their respective managers Treasure.META_MANAGER.register(getMod().getId()); Treasure.TEMPLATE_MANAGER.register(getMod().getId()); Treasure.DECAY_MANAGER.register(getMod().getId()); @@ -120,7 +115,7 @@ public void onWorldLoad(WorldEvent.Load event) { @SubscribeEvent public void onWorldUnLoad(WorldEvent.Unload event) { - // TODO clear LOOT_TABLES_MASTER + Treasure.LOOT_TABLE_MASTER.clear(); } /** diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/ILootTableMaster.java b/src/main/java/com/someguyssoftware/treasure2/loot/ILootTableMaster.java new file mode 100644 index 000000000..ce6310a15 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/loot/ILootTableMaster.java @@ -0,0 +1,40 @@ +package com.someguyssoftware.treasure2.loot; + +import java.util.List; + +import com.someguyssoftware.gottschcore.mod.IMod; + +import net.minecraft.world.WorldServer; + +public interface ILootTableMaster { + + /** + * Call in WorldEvent.Load event handler. + * @param world + */ + void init(WorldServer world); + + void clear(); + + /** + * CREATES CONFIG FOLDERS/RESOURCES - on mod/manager creation + * Creates all the necessary folder and resources before actual loading of loot tables. + * Call in your @Mod class in preInt() or int(). + * + * @param resourceRootPath + * @param modID + */ + void buildAndExpose(String resourceRootPath, String modID, List locations); + + /** + * ONE STOP SHOP to tell where the resource is and to add to the maps and to register with minecraft + * + * Call in WorldEvent.Load event handler. + * Overide this method if you have a different cache mechanism. + * @param location + */ + void register(WorldServer world, String modID, List locations); + + IMod getMod(); + +} \ No newline at end of file diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java index e1e915bba..40637f4b7 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java @@ -18,17 +18,20 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Random; import java.util.stream.Stream; import org.apache.commons.io.FilenameUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import com.google.common.collect.Lists; import com.google.common.io.Resources; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -38,11 +41,11 @@ import com.someguyssoftware.gottschcore.mod.IMod; import com.someguyssoftware.gottschcore.version.BuildVersion; import com.someguyssoftware.gottschcore.version.VersionChecker; -import com.someguyssoftware.treasure2.Treasure; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.world.WorldServer; -import net.minecraft.world.storage.loot.LootTableList; import net.minecraft.world.storage.loot.LootTableManager; import net.minecraft.world.storage.loot.RandomValueRange; @@ -50,8 +53,8 @@ * @author Mark Gottschling on Dec 1, 2020 * */ -public class LootTableMaster2 { - public static Logger LOGGER = LogManager.getLogger(Treasure.logger.getName()); +public class LootTableMaster2 implements ILootTableMaster { + public static Logger LOGGER = LogManager.getLogger(GottschCore.logger.getName()); public static final String LOOT_TABLES_FOLDER = "loot_tables"; private static final String BASE_FOLDER = "base"; @@ -71,8 +74,7 @@ public LootTableMaster2(IMod mod) { } /** - * From WorldServer.class: this.lootTable = new LootTableManager(new File(new - * File(this.saveHandler.getWorldDirectory(), "data"), "loot_tables")); + * */ public LootTableMaster2(IMod mod, File folder) { this.mod = mod; @@ -83,12 +85,17 @@ public LootTableMaster2(IMod mod, File folder) { * Call in WorldEvent.Load event handler. * @param world */ + @Override public void init(WorldServer world) { Path path = Paths.get(world.getSaveHandler().getWorldDirectory().getPath(), "data", "loot_tables"); - Treasure.logger.debug("path to world data loot tables -> {}", path.toAbsolutePath()); setWorldDataBaseFolder(path.toFile()); } + @Override + public void clear() { + + } + /** * CREATES CONFIG FOLDERS/RESOURCES - on mod/manager creation * Creates all the necessary folder and resources before actual loading of loot tables. @@ -97,6 +104,7 @@ public void init(WorldServer world) { * @param resourceRootPath * @param modID */ + @Override public void buildAndExpose(String resourceRootPath, String modID, List locations) { GottschCore.logger.debug("loot table folder locations -> {}", locations); // create paths to custom loot tables if they don't exist @@ -114,18 +122,15 @@ public void buildAndExpose(String resourceRootPath, String modID, List l * Overide this method if you have a different cache mechanism. * @param location */ + @Override public void register(WorldServer world, String modID, List locations) { // TODO copy files from config location to world data location if not there already - for (String location : locations) { // get loot table files as ResourceLocations from the world data location List locs = getLootTablesResourceLocations(modID, location); } - // register it with MC -// ResourceLocation newLoc = LootTableList.register(loc); - // TODO finish } @@ -544,6 +549,57 @@ public Optional loadLootTable(File folder, ResourceLocation reso } } } + + /** + * + * @param inventory + * @param random + * @param context + */ + public void fillInventory(IInventory inventory, Random random, List list) { + List emptySlots = getEmptySlotsRandomized(inventory, random); + this.shuffleItems(list, emptySlots.size(), random); + + for (ItemStack itemstack : list) { + // if no more empty slots are available + if (emptySlots.isEmpty()) { + return; + } + + if (itemstack.isEmpty()) { + inventory.setInventorySlotContents(((Integer) emptySlots.remove(emptySlots.size() - 1)).intValue(), ItemStack.EMPTY); + } + else { + inventory.setInventorySlotContents(((Integer) emptySlots.remove(emptySlots.size() - 1)).intValue(), itemstack); + } + } + } + + /** + * + * @param inventory + * @param rand + * @return + */ + private List getEmptySlotsRandomized(IInventory inventory, Random rand) { + List list = Lists.newArrayList(); + + for (int i = 0; i < inventory.getSizeInventory(); ++i) { + if (inventory.getStackInSlot(i).isEmpty()) { + list.add(Integer.valueOf(i)); + } + } + + Collections.shuffle(list, rand); + return list; + } + + /** + * shuffles items by changing their order (no stack splitting) + */ + private void shuffleItems(List stacks, int emptySlotsSize, Random rand) { + Collections.shuffle(stacks, rand); + } public File getWorldDataBaseFolder() { return worldDataBaseFolder; @@ -553,6 +609,7 @@ public void setWorldDataBaseFolder(File baseFolder) { this.worldDataBaseFolder = baseFolder; } + @Override public IMod getMod() { return mod; } diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java index 364d4b394..384dcc296 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java @@ -12,18 +12,23 @@ import java.nio.file.StandardCopyOption; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.Set; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import com.google.common.collect.HashBasedTable; import com.google.common.collect.ImmutableList; import com.google.common.collect.Table; -import com.someguyssoftware.gottschcore.GottschCore; import com.someguyssoftware.gottschcore.mod.IMod; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.enums.Rarity; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; import net.minecraft.util.ResourceLocation; import net.minecraft.world.storage.loot.LootTableList; @@ -33,24 +38,82 @@ * */ public class TreasureLootTableMaster2 extends LootTableMaster2 { + public static Logger LOGGER = LogManager.getLogger(Treasure.logger.getName()); + private static final String CUSTOM_LOOT_TABLES_RESOURCE_PATH = "/loot_tables/"; public static final String CUSTOM_LOOT_TABLE_KEY = "CUSTOM"; /* - * relative location of chest loot tables - in resource path or file system + * relative location of chest loot tables - in resource path or file system. + * these are required folders. */ - private static final List BASE_CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( - "base/chests/common" + private static final List CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( + "chests/common", + "chests/uncommon", + "chests/scarce", + "chests/rare", + "chests/epic" + ); + + /* + * list of special loot table locations. + * this is a required folder. + */ + private static final List SPECIAL_CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( + "chests/special" ); /* - * Guava Table of LootTable ResourceLocations based on LootTableManager-key and Rarity + * list of inject loot table locations. items from these loot tables will be injected into the final item pool for chests + * these are required folders. + */ + private static final List INJECT_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( + "inject/common", + "inject/uncommon", + "inject/scarce", + "inject/rare", + "inject/epic" + ); + + /* + * relative location of other loot tables - in resource path or file system. + * these are supporting loot tables that each contains a pool of items to pull from. + * this is what treasure2 uses to organize items, it is not necessary to follow this format + * in modded / added loot tables or supporting pools + */ + private static final List POOL_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( + "pools/treasure", + "pools/armor", + "pools/food", + "pools/items", + "pools/potions", + "pools/tools" + ); + + /* + * Guava Table of loot table ResourceLocations for Chests based on LootTableManager-key and Rarity */ private final Table> CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE = HashBasedTable.create(); + + /* + * Guava Table of loot table ResourceLocations for Injects based on a category-key and Rarity + */ + private final Table> INJECT_LOOT_TABLES_RESOURCE_LOCATION_TABLE = HashBasedTable.create(); + /* - * Guava Table of LootTables based on LootTableManager-key and Rarity + * Guava Table of LootTableShell for Chests based on LootTableManager-key and Rarity */ private final Table> CHEST_LOOT_TABLES_TABLE = HashBasedTable.create(); + + /* + * + */ + private final Map SPECIAL_LOOT_TABLES_MAP = new HashMap<>(); + + /* + * + */ + private final Table> INJECT_LOOT_TABLES_TABLE = HashBasedTable.create(); /** * @@ -59,7 +122,7 @@ public class TreasureLootTableMaster2 extends LootTableMaster2 { public TreasureLootTableMaster2(IMod mod) { super(mod); buildAndExpose(Treasure.MODID); - + // initialize the maps for (Rarity r : Rarity.values()) { CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.put(CUSTOM_LOOT_TABLE_KEY, r, new ArrayList()); @@ -67,14 +130,30 @@ public TreasureLootTableMaster2(IMod mod) { } } + /** + * + */ + @Override + public void clear() { + super.clear(); + CHEST_LOOT_TABLES_TABLE.clear(); + CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.clear(); + SPECIAL_LOOT_TABLES_MAP.clear(); + INJECT_LOOT_TABLES_TABLE.clear(); + INJECT_LOOT_TABLES_RESOURCE_LOCATION_TABLE.clear(); + } + /** * * @param modID */ private void buildAndExpose(String modID) { - buildAndExpose(CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, BASE_CHEST_LOOT_TABLE_FOLDER_LOCATIONS); + buildAndExpose(CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, CHEST_LOOT_TABLE_FOLDER_LOCATIONS); + buildAndExpose(CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, SPECIAL_CHEST_LOOT_TABLE_FOLDER_LOCATIONS); + buildAndExpose(CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, POOL_LOOT_TABLE_FOLDER_LOCATIONS); + buildAndExpose(CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, INJECT_LOOT_TABLE_FOLDER_LOCATIONS); } - + /** * Call in WorldEvent.Load event handler. * Overide this method if you have a different cache mechanism. @@ -82,19 +161,16 @@ private void buildAndExpose(String modID) { * @param modID */ public void register(String modID) { + // copy all folders/files from config to world data + moveLootTables(modID, ""); - for (String location : BASE_CHEST_LOOT_TABLE_FOLDER_LOCATIONS) { - // create the destination folders - createWorldDataLootTableFolder(modID, location); - // copy from config location to world data location - moveLootTable(modID, location); - + for (String location : CHEST_LOOT_TABLE_FOLDER_LOCATIONS) { // get loot table files as ResourceLocations from the file system location List resourceLocations = getLootTablesResourceLocations(modID, location); // load each ResourceLocation as LootTable and map it. for (ResourceLocation resourceLocation : resourceLocations) { Path path = Paths.get(resourceLocation.getResourcePath()); - Treasure.logger.debug("path to resource loc -> {}", path.toString()); + LOGGER.debug("path to resource loc -> {}", path.toString()); // map the loot table resource location Rarity key = Rarity.valueOf(path.getName(path.getNameCount()-2).toString().toUpperCase()); // add to resourcemap @@ -104,62 +180,142 @@ public void register(String modID) { if (lootTable.isPresent()) { // add loot table to map CHEST_LOOT_TABLES_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(lootTable.get()); - Treasure.logger.debug("tabling loot table: {} {} -> {}", CUSTOM_LOOT_TABLE_KEY, key, resourceLocation); + LOGGER.debug("tabling loot table: {} {} -> {}", CUSTOM_LOOT_TABLE_KEY, key, resourceLocation); } - // register it with MC - ResourceLocation newLoc = LootTableList.register(resourceLocation); + LootTableList.register(resourceLocation); + } + } + + /* + * register special loot tables + */ + for (String location : SPECIAL_CHEST_LOOT_TABLE_FOLDER_LOCATIONS) { + List specialLocations = getLootTablesResourceLocations(modID, location); + + // load each ResourceLocation as LootTable and map it. + for (ResourceLocation resourceLocation : specialLocations) { + Path path = Paths.get(resourceLocation.getResourcePath()); + // create loot table + Optional lootTable = loadLootTable(getWorldDataBaseFolder(), resourceLocation); + if (lootTable.isPresent()) { + // add to map + SpecialLootTables specialLootTables = SpecialLootTables.valueOf(com.google.common.io.Files.getNameWithoutExtension(path.getName(path.getNameCount()-1).toString().toUpperCase())); + // add to map + SPECIAL_LOOT_TABLES_MAP.put(specialLootTables, lootTable.get()); + LootTableList.register(resourceLocation); + } + } + } + + /* + * register inject loot tables + * + */ + for (String location : INJECT_LOOT_TABLE_FOLDER_LOCATIONS) { + List resourceLocations = getLootTablesResourceLocations(modID, location); + for (ResourceLocation resourceLocation : resourceLocations) { + Path path = Paths.get(resourceLocation.getResourcePath()); + LOGGER.debug("path to inject resource loc -> {}", path.toString()); + // map the loot table resource location + Rarity rarity = Rarity.valueOf(path.getName(path.getNameCount()-2).toString().toUpperCase()); + // load loot table to get categories + // create loot table + Optional lootTable = loadLootTable(getWorldDataBaseFolder(), resourceLocation); + if (lootTable.isPresent()) { + List keys = lootTable.get().getCategories(); + keys.forEach(key -> { + key = key.isEmpty() ? "general" : key; + if (!INJECT_LOOT_TABLES_RESOURCE_LOCATION_TABLE.containsRow(key)) { + // initialize + for (Rarity r : Rarity.values()) { + INJECT_LOOT_TABLES_RESOURCE_LOCATION_TABLE.put(key, r, new ArrayList()); + INJECT_LOOT_TABLES_TABLE.put(key, r, new ArrayList()); + } + } + INJECT_LOOT_TABLES_RESOURCE_LOCATION_TABLE.get(key, rarity).add(resourceLocation); + INJECT_LOOT_TABLES_TABLE.get(key, rarity).add(lootTable.get()); + }); + } + LootTableList.register(resourceLocation); } } } - + /** * * @param modID * @param location */ - protected void moveLootTable(String modID, String location) { + protected void moveLootTables(String modID, String location) { Path configFilePath = Paths.get(getMod().getConfig().getConfigFolder(), modID, LOOT_TABLES_FOLDER, location).toAbsolutePath(); - Path worldDataFilePath = Paths.get(getWorldDataBaseFolder().getParent(), LOOT_TABLES_FOLDER, modID, location).toAbsolutePath(); - - // get all the files under the path + Path worldDataFilePath = Paths.get(getWorldDataBaseFolder().toString(), modID, location).toAbsolutePath(); + Set fileList = new HashSet<>(); - try { + try { Files.walkFileTree(configFilePath, new SimpleFileVisitor() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) - throws IOException { - if (!Files.isDirectory(file)) { - fileList.add(file.getFileName().toString()); - - Path destinationFilePath = worldDataFilePath.resolve(file.getFileName()); - if (Files.notExists(destinationFilePath)) { - // copy from resource/classpath to file path - try { - Files.copy(file, destinationFilePath, StandardCopyOption.REPLACE_EXISTING); - } - catch(IOException e ) { - GottschCore.logger.error(String.format("could not copy file %s to %s", file.toString(), destinationFilePath.toString()), e); - } + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + // grab everything after loot_tables + String destinationStr = dir.toString(); + String partial = destinationStr.substring(destinationStr.indexOf(LOOT_TABLES_FOLDER) + LOOT_TABLES_FOLDER.length()); + Path destinationFilePath = Paths.get(worldDataFilePath.toString(), partial); +// LOGGER.debug("destination folder to be tested/created -> {}", destinationFilePath.toString()); + if (Files.notExists(destinationFilePath)) { + try { + Files.createDirectories(destinationFilePath); + } catch (IOException e) { + LOGGER.warn("Unable to create world data loot tables folder \"{}\"", destinationFilePath.toString()); } - else { - boolean isCurrent = isWorldDataVersionCurrent(file, destinationFilePath); - GottschCore.logger.error("is file system (world data) loot table current -> {}", isCurrent); - if (!isCurrent) { - Files.move( - destinationFilePath, - Paths.get(destinationFilePath.getFileName().toString() + ".bak").toAbsolutePath(), - StandardCopyOption.REPLACE_EXISTING); - Files.copy(file, destinationFilePath); - } - } - } - return FileVisitResult.CONTINUE; - } + } + return super.preVisitDirectory(dir, attrs); + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) + throws IOException { +// LOGGER.debug("walking file -> {}", file.toString()); + fileList.add(file.getFileName().toString()); + String destinationStr = file.toString(); + String partial = destinationStr.substring(destinationStr.indexOf(LOOT_TABLES_FOLDER) + LOOT_TABLES_FOLDER.length()); + Path destinationFilePath = Paths.get(worldDataFilePath.toString(), partial); +// LOGGER.debug("new destination -> {}", destinationFilePath.toString()); + if (Files.notExists(destinationFilePath)) { + // copy from resource/classpath to file path + try { + Files.copy(file, destinationFilePath, StandardCopyOption.REPLACE_EXISTING); + } + catch(IOException e ) { + LOGGER.error(String.format("could not copy file %s to %s", file.toString(), destinationFilePath.toString()), e); + } + } + else { + boolean isCurrent = isWorldDataVersionCurrent(file, destinationFilePath); + LOGGER.debug("is world data loot table {} current -> {}", destinationFilePath, isCurrent); + if (!isCurrent) { + Files.move( + destinationFilePath, + Paths.get(destinationFilePath.getFileName().toString() + ".bak").toAbsolutePath(), + StandardCopyOption.REPLACE_EXISTING); + Files.copy(file, destinationFilePath); + } + } + return FileVisitResult.CONTINUE; + } }); } catch (IOException e) { - Treasure.logger.error(String.format("an errored while file walking the location -> %s:", configFilePath), e); + LOGGER.error(String.format("an errored while file walking the location -> %s:", configFilePath), e); return; } } + + /** + * + * @param tableEnum + * @return + */ + public LootTableShell getSpecialLootTable(SpecialLootTables table) { + LootTableShell lootTable = SPECIAL_LOOT_TABLES_MAP.get(table); + return lootTable; + } } diff --git a/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json index cb7ac30c7..28a4f4a6a 100644 --- a/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json @@ -4,10 +4,11 @@ { "name": "treasure", "rolls": 2, + "bonus_rolls": 1.0, "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/common", + "name": "treasure2:pools/treasure/common", "weight": 30 } ] @@ -21,7 +22,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/common", + "name": "treasure2:pools/items/common", "weight": 1 } ] @@ -35,7 +36,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/common", + "name": "treasure2:pools/armor/common", "weight": 1 } ] @@ -49,7 +50,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/common", + "name": "treasure2:pools/food/common", "weight": 1 } ] @@ -63,7 +64,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/common", + "name": "treasure2:pools/tools/common", "weight": 1 } ] @@ -77,7 +78,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/common", + "name": "treasure2:pools/potions/common", "weight": 1 } ] diff --git a/src/main/resources/loot_tables/treasure2/inject/common/items.json b/src/main/resources/loot_tables/treasure2/inject/common/items.json new file mode 100644 index 000000000..e5a113937 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/inject/common/items.json @@ -0,0 +1,183 @@ +{ + "version": "1.0", + "category": ["items"], + "pools": [ + { + "name": "common_items", + "rolls": 1, + "entries": [ + { + "entryName": "bread", + "type": "item", + "name": "minecraft:bread", + "weight": 80, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "entryName": "wool", + "type": "item", + "name": "minecraft:wool", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "torch", + "type": "item", + "name": "minecraft:torch", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "leather", + "type": "item", + "name": "minecraft:leather", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "rabbit_hide", + "type": "item", + "name": "minecraft:rabbit_hide", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "gold_nugget", + "type": "item", + "name": "minecraft:gold_nugget", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "iron_ingot", + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 30, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "arrow", + "type": "item", + "name": "minecraft:arrow", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "entryName": "bone", + "type": "item", + "name": "minecraft:bone", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "spider_eye", + "type": "item", + "name": "minecraft:spider_eye", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "rotten_flesh", + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 50 + }, + { + "entryName": "string", + "type": "item", + "name": "minecraft:string", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/items/common.json b/src/main/resources/loot_tables/treasure2/pools/items/common.json new file mode 100644 index 000000000..e9b6db794 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/items/common.json @@ -0,0 +1,182 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "common_items", + "rolls": 1, + "entries": [ + { + "entryName": "bread", + "type": "item", + "name": "minecraft:bread", + "weight": 80, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "entryName": "wool", + "type": "item", + "name": "minecraft:wool", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "torch", + "type": "item", + "name": "minecraft:torch", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "leather", + "type": "item", + "name": "minecraft:leather", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "rabbit_hide", + "type": "item", + "name": "minecraft:rabbit_hide", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "gold_nugget", + "type": "item", + "name": "minecraft:gold_nugget", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "iron_ingot", + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 30, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "arrow", + "type": "item", + "name": "minecraft:arrow", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "entryName": "bone", + "type": "item", + "name": "minecraft:bone", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "spider_eye", + "type": "item", + "name": "minecraft:spider_eye", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "rotten_flesh", + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 50 + }, + { + "entryName": "string", + "type": "item", + "name": "minecraft:string", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/base/chests/common/base_table.json b/src/main/resources/loot_tables/treasure2/pools/treasure/common.json similarity index 100% rename from src/main/resources/loot_tables/treasure2/base/chests/common/base_table.json rename to src/main/resources/loot_tables/treasure2/pools/treasure/common.json diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/epic.json b/src/main/resources/loot_tables/treasure2/pools/treasure/epic.json new file mode 100644 index 000000000..57a9ca123 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/epic.json @@ -0,0 +1,204 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "epic_keys", + "rolls": 1, + "entries": [ + { + "entryName": "jewelled_key", + "type": "item", + "name": "treasure2:jewelled_key", + "weight": 10 + }, + { + "entryName": "ruby_key", + "type": "item", + "name": "treasure2:ruby_key", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + } + ] + }, + { + "entryName": "sapphire_key", + "type": "item", + "name": "treasure2:sapphire_key", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + } + ] + }, + { + "entryName": "diamond_key", + "type": "item", + "name": "treasure2:diamond_key", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "emerald_key", + "type": "item", + "name": "treasure2:emerald_key", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "metallurgists_key", + "type": "item", + "name": "treasure2:metallurgists_key", + "weight": 20 + }, + { + "entryName": "skeleton_key", + "type": "item", + "name": "treasure2:skeleton_key", + "weight": 12 + } + ] + }, + { + "name": "epic_treasure", + "rolls": 1, + "entries": [ + { + "entryName": "silver_coin", + "type": "item", + "name": "treasure2:silver_coin", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "entryName": "gold_coin", + "type": "item", + "name": "treasure2:gold_coin", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "entryName": "skull_sword", + "type": "item", + "name": "treasure2:skull_sword", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.5 + } + ] + }, + { + "entryName": "sapphire", + "type": "item", + "name": "treasure2:sapphire", + "weight": 10 + }, + { + "entryName": "ruby", + "type": "item", + "name": "treasure2:ruby", + "weight": 10 + }, + { + "entryName": "white_pearl", + "type": "item", + "name": "treasure2:white_pearl", + "weight": 10 + }, + { + "entryName": "black_pearl", + "type": "item", + "name": "treasure2:white_pearl", + "weight": 8 + }, + { + "entryName": "eye_patch", + "type": "item", + "name": "treasure2:eye_patch", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.50 + } + ] + }, + { + "entryName": "painting_blocks_bricks", + "type": "item", + "name": "treasure2:painting_blocks_bricks", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.25 + } + ] + }, + { + "entryName": "painting_blocks_lava", + "type": "item", + "name": "treasure2:painting_blocks_lava", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.25 + } + ] + } + ] + }, + { + "name": "epic_charms", + "rolls": 1, + "entries": [ + + ] + } + ] +} diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json new file mode 100644 index 000000000..bf3c00033 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json @@ -0,0 +1,116 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "epic_charms", + "rolls": 1, + "entries": [ + { + "entryName": "angel_blessed", + "type": "item", + "name": "treasure2:angel_blessed", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.10 + } + ] + }, + { + "entryName": "miners_friend", + "type": "item", + "name": "treasure2:minders_friend", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.15 + } + ] + }, + { + "entryName": "charm1", + "type": "item", + "name": "treasure2:charmed_gold_coin", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.25 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "greater_healing", + "hardened_shielding", + "overfed_fullness", + "major_harvesting", + "greater_illumination" + ] + }, + { + "function": "treasure2:charm_randomly", + "charms": [ + "greater_healing", + "hardened_shielding", + "overfed_fullness", + "major_harvesting", + "greater_illumination" + ] + } + ] + }, + { + "entryName": "charm2", + "type": "item", + "name": "treasure2:charmed_gold_coin", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.2 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "greater_healing", + "hardened_shielding", + "overfed_fullness", + "major_harvesting", + "greater_illumination", + "greater_decay" + ] + }, + { + "function": "treasure2:charm_randomly", + "charms": [ + "grand_healing", + "powerful_shielding", + "gorged_fullness", + "grand_harvesting", + "grand_illumination" + ] + } + ] + }, + { + "entryName": "masters_pouch", + "type": "item", + "weight": 10, + "name": "treasure2:masters_pouch", + "conditions": [ + { + "condition": "random_chance", + "chance": 0.15 + } + ] + } + ] + } + ] +} diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/rare.json b/src/main/resources/loot_tables/treasure2/pools/treasure/rare.json new file mode 100644 index 000000000..907850337 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/rare.json @@ -0,0 +1,179 @@ +{ + "version": "1.1", + "pools": [ + { + "name": "rare_keys", + "rolls": 1, + "entries": [ + { + "entryName": "lightning_key", + "type": "item", + "name": "treasure2:lightning_key", + "weight": 10 + }, + { + "entryName": "metallurgists_key", + "type": "item", + "name": "treasure2:metallurgists_key", + "weight": 10 + }, + { + "entryName": "skeleton_key", + "type": "item", + "name": "treasure2:skeleton_key", + "weight": 7 + }, + { + "entryName": "ruby_key", + "type": "item", + "name": "treasure2:ruby_key", + "weight": 25 + }, + { + "entryName": "sapphire_key", + "type": "item", + "name": "treasure2:sapphire_key", + "weight": 25 + }, + { + "entryName": "diamond_key", + "type": "item", + "name": "treasure2:diamond_key", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "emerald_key", + "type": "item", + "name": "treasure2:emerald_key", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + } + ] + }, + { + "name": "rare_treasure", + "rolls": 1, + "entries": [ + { + "entryName": "silver_coin", + "type": "item", + "name": "treasure2:silver_coin", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 6 + } + } + ] + }, + { + "entryName": "gold_coin", + "type": "item", + "name": "treasure2:gold_coin", + "weight": 40, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "skull_sword", + "type": "item", + "name": "treasure2:skull_sword", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.30 + } + ] + }, + { + "entryName": "eye_patch", + "type": "item", + "name": "treasure2:eye_patch", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.30 + } + ] + }, + { + "entryName": "sapphire", + "type": "item", + "name": "treasure2:sapphire", + "weight": 10 + }, + { + "entryName": "ruby", + "type": "item", + "name": "treasure2:ruby", + "weight": 10 + }, + { + "entryName": "white_pearl", + "type": "item", + "name": "treasure2:white_pearl", + "weight": 8 + }, + { + "entryName": "painting_blocks_sand", + "type": "item", + "name": "treasure2:painting_blocks_sand", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.4 + } + ] + }, + { + "entryName": "painting_blocks_wood", + "type": "item", + "name": "treasure2:painting_blocks_wood", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.4 + } + ] + } + ] + }, + { + "name": "rare_charms", + "rolls": 1, + "entries": [ + ] + } + ] +} diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json new file mode 100644 index 000000000..f93ffde6a --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json @@ -0,0 +1,142 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "rare_charms", + "rolls": 1, + "entries": [ + { + "entryName": "charm1", + "type": "item", + "name": "treasure2:charmed_gold_coin", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.15 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "greater_healing", + "hardened_shielding", + "overfed_fullness", + "major_harvesting", + "greater_illumination" + ] + }, + { + "function": "treasure2:charm_randomly", + "charms": [ + "greater_healing", + "hardened_shielding", + "overfed_fullness", + "major_harvesting", + "greater_illumination", + "decay" + ] + } + ] + }, + { + "entryName": "charm2", + "type": "item", + "name": "treasure2:charmed_ruby", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.25 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "grand_healing", + "powerful_shielding", + "gorged_fullness", + "grand_harvesting", + "grand_illumination" + ] + } + ] + }, + { + "entryName": "medics_token", + "type": "item", + "name": "treasure2:medics_token", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.15 + } + ] + }, + { + "entryName": "salandaars_ward", + "type": "item", + "name": "treasure2:salandaars_ward", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.15 + } + ] + }, + { + "entryName": "dwarven_talisman", + "type": "item", + "name": "treasure2:dwarven_talisman", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.15 + } + ] + }, + { + "entryName": "adephagias_bounty", + "type": "item", + "name": "treasure2:adephagias_bounty", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.15 + } + ] + }, + { + "entryName": "mirthas_torch", + "type": "item", + "name": "treasure2:mirthas_torch", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.15 + } + ] + }, + { + "entryName": "apprentices_pouch", + "type": "item", + "weight": 10, + "name": "treasure2:apprentices_pouch", + "conditions": [ + { + "condition": "random_chance", + "chance": 0.12 + } + ] + } + ] + } + ] +} diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/scarce.json b/src/main/resources/loot_tables/treasure2/pools/treasure/scarce.json new file mode 100644 index 000000000..a1bbe53a8 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/scarce.json @@ -0,0 +1,201 @@ +{ + "version": "1.1", + "pools": [ + { + "name": "scarce_keys", + "rolls": 1, + "entries": [ + { + "entryName": "iron_key", + "type": "item", + "name": "treasure2:iron_key", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "thiefs_lock_pick", + "type": "item", + "name": "treasure2:thiefs_lock_pick", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "leaf_key", + "type": "item", + "name": "treasure2:leaf_key", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "ember_key", + "type": "item", + "name": "treasure2:ember_key", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "lightning_key", + "type": "item", + "name": "treasure2:lightning_key", + "weight": 7 + }, + { + "entryName": "gold_key", + "type": "item", + "name": "treasure2:gold_key", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "spider_key", + "type": "item", + "name": "treasure2:spider_key", + "weight": 20 + }, + { + "entryName": "diamond_key", + "type": "item", + "name": "treasure2:diamond_key", + "weight": 10 + }, + { + "entryName": "emerald_key", + "type": "item", + "name": "treasure2:emerald_key", + "weight": 10 + } + ] + }, + { + "name": "scarce_treasure", + "rolls": 1, + "entries": [ + { + "entryName": "silver_coin", + "type": "item", + "name": "treasure2:silver_coin", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "gold_coin", + "type": "item", + "name": "treasure2:gold_coin", + "weight": 40, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "skull_sword", + "type": "item", + "name": "treasure2:skull_sword", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.2 + } + ] + }, + { + "entryName": "painting_blocks_dirt", + "type": "item", + "name": "treasure2:painting_blocks_dirt", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.5 + } + ] + }, + { + "entryName": "painting_blocks_cobblestone", + "type": "item", + "name": "treasure2:painting_blocks_cobblestone", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.5 + } + ] + }, + { + "entryName": "painting_blocks_water", + "type": "item", + "name": "treasure2:painting_blocks_water", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.5 + } + ] + } + ] + }, + { + "name": "scarce_charms", + "rolls": 1, + "entries": [ + + ] + } + ] +} diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json new file mode 100644 index 000000000..0905e73d5 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json @@ -0,0 +1,117 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "scarce_charms", + "rolls": 1, + "entries": [ + { + "entryName": "charm1", + "type": "item", + "name": "treasure2:charmed_silver_coin", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.12 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "lesser_healing", + "durable_shielding", + "fullness", + "minor_harvesting", + "lesser_illumination" + ] + } + ] + }, + { + "entryName": "charm2", + "type": "item", + "name": "treasure2:charmed_gold_coin", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.12 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "lesser_healing", + "durable_shielding", + "fullness", + "minor_harvesting", + "lesser_illumination" + ] + }, + { + "function": "treasure2:charm_randomly", + "charms": [ + "healing", + "stout_shielding", + "sated_fullness", + "harvesting", + "illumination" + ] + } + ] + }, + { + "entryName": "charm3", + "type": "item", + "name": "treasure2:charmed_gold_coin", + "weight": 10, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.1 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "greater_healing", + "hardened_shielding", + "overfed_fullness", + "major_harvesting", + "greater_illumination" + ] + } + ] + }, + { + "entryName": "fools_coin", + "type": "item", + "weight": 10, + "name": "treasure2:fools_coin", + "conditions": [ + { + "condition": "random_chance", + "chance": 0.12 + } + ] + }, + { + "entryName": "lucky_pouch", + "type": "item", + "weight": 10, + "name": "treasure2:lucky_pouch", + "conditions": [ + { + "condition": "random_chance", + "chance": 0.12 + } + ] + } + ] + } + ] +} diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon.json b/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon.json new file mode 100644 index 000000000..f195c8087 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon.json @@ -0,0 +1,152 @@ +{ + "version": "1.1", + "pools": [ + { + "name": "uncommon_keys", + "rolls": 1, + "entries": [ + { + "entryName": "wood_key", + "type": "item", + "name": "treasure2:wood_key", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "stone_key", + "type": "item", + "name": "treasure2:stone_key", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "pilferers_lock_pick", + "type": "item", + "name": "treasure2:pilferers_lock_pick", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "iron_key", + "type": "item", + "name": "treasure2:iron_key", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "thiefs_lock_pick", + "type": "item", + "name": "treasure2:thiefs_lock_pick", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "ember_key", + "type": "item", + "name": "treasure2:ember_key", + "weight": 10 + }, + { + "entryName": "leaf_key", + "type": "item", + "name": "treasure2:leaf_key", + "weight": 15 + }, + { + "entryName": "gold_key", + "type": "item", + "name": "treasure2:gold_key", + "weight": 10 + }, + { + "entryName": "spider_key", + "type": "item", + "name": "treasure2:spider_key", + "weight": 10 + } + ] + }, + { + "name": "uncommon_treasure", + "rolls": 1, + "entries": [ + { + "entryName": "silver_coin", + "type": "item", + "name": "treasure2:silver_coin", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "gold_coin", + "type": "item", + "name": "treasure2:gold_coin", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "name": "uncommon_charms", + "rolls": 1, + "entries": [ + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json new file mode 100644 index 000000000..096f9e5a8 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json @@ -0,0 +1,76 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "uncommon_charms", + "rolls": 1, + "entries": [ + { + "entryName": "charm1", + "type": "item", + "name": "treasure2:charmed_silver_coin", + "weight": 1, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.2 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "lesser_healing", + "durable_shielding" + ] + } + ] + }, + { + "entryName": "charm2", + "type": "item", + "name": "treasure2:charmed_silver_coin", + "weight": 1, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.1 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "lesser_healing", + "durable_shielding", + "sated_fullness", + "harvesting" + ] + } + ] + }, + { + "entryName": "charm3", + "type": "item", + "name": "treasure2:charmed_silver_coin", + "weight": 1, + "conditions": [ + { + "condition": "random_chance", + "chance": 0.12 + } + ], + "functions": [ + { + "function": "treasure2:charm_randomly", + "charms": [ + "healing", + "stout_shielding" + ] + } + ] + } + ] + } + ] +} \ No newline at end of file From 9e88226f603e9761e5cb15c24cc154ca0e008115 Mon Sep 17 00:00:00 2001 From: gottsch Date: Fri, 4 Dec 2020 22:54:36 -0500 Subject: [PATCH 07/20] working version using new loot mgmt system. --- .../someguyssoftware/treasure2/Treasure.java | 7 + .../treasure2/client/gui/GuiHandler.java | 42 ++- .../eventhandler/WorldEventHandler.java | 52 ++-- .../generator/chest/IChestGenerator.java | 205 ++++++++++++++- .../treasure2/loot/LootTableMaster2.java | 64 +---- .../treasure2/loot/LootTableShell.java | 33 ++- .../loot/TreasureLootTableMaster.java | 28 +- .../loot/TreasureLootTableMaster2.java | 104 +++++++- .../loot/TreasureLootTableRegistry.java | 50 ++++ .../loot/function/CharmRandomly2.java | 153 +++++++++++ .../treasure2/loot/function/SetCharms.java | 1 - .../treasure2/loot/function/SetCharms2.java | 158 +++++++++++ .../chests/common/armor_tool_chest.json | 9 +- .../chests/common/food_potion_chest.json | 9 +- .../chests/common/general_chest.json | 1 + .../treasure2/chests/epic/general_chest.json | 1 + .../chests/rare/armor_tool_chest.json | 1 + .../chests/rare/food_potion_chest.json | 1 + .../treasure2/chests/rare/general_chest.json | 1 + .../chests/scarce/armor_tool_chest.json | 1 + .../chests/scarce/food_potion_chest.json | 1 + .../chests/scarce/general_chest.json | 1 + .../chests/uncommon/armor_tool_chest.json | 21 +- .../chests/uncommon/food_potion_chest.json | 17 +- .../chests/uncommon/general_chest.json | 25 +- .../treasure2/inject/common/items.json | 2 +- .../treasure2/pools/armor/common.json | 59 +++++ .../treasure2/pools/armor/epic.json | 133 ++++++++++ .../treasure2/pools/armor/rare.json | 87 ++++++ .../treasure2/pools/armor/scarce.json | 117 +++++++++ .../treasure2/pools/armor/uncommon.json | 85 ++++++ .../treasure2/pools/food/common.json | 248 ++++++++++++++++++ .../treasure2/pools/food/epic.json | 23 ++ .../treasure2/pools/food/rare.json | 68 +++++ .../treasure2/pools/food/scarce.json | 23 ++ .../treasure2/pools/food/uncommon.json | 75 ++++++ .../treasure2/pools/items/epic.json | 137 ++++++++++ .../treasure2/pools/items/rare.json | 236 +++++++++++++++++ .../treasure2/pools/items/scarce.json | 113 ++++++++ .../treasure2/pools/items/uncommon.json | 209 +++++++++++++++ .../treasure2/pools/potions/common.json | 59 +++++ .../treasure2/pools/potions/epic.json | 83 ++++++ .../treasure2/pools/potions/rare.json | 119 +++++++++ .../treasure2/pools/potions/scarce.json | 107 ++++++++ .../treasure2/pools/potions/uncommon.json | 71 +++++ .../treasure2/pools/tools/common.json | 47 ++++ .../treasure2/pools/tools/epic.json | 48 ++++ .../treasure2/pools/tools/rare.json | 61 +++++ .../treasure2/pools/tools/scarce.json | 67 +++++ .../treasure2/pools/tools/uncommon.json | 62 +++++ .../treasure2/pools/treasure/common.json | 2 +- .../treasure2/pools/treasure/epic_charms.json | 8 +- .../treasure2/pools/treasure/rare_charms.json | 6 +- .../pools/treasure/scarce_charms.json | 8 +- .../pools/treasure/uncommon_charms.json | 6 +- 55 files changed, 3159 insertions(+), 196 deletions(-) create mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableRegistry.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly2.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms2.java create mode 100644 src/main/resources/loot_tables/treasure2/pools/armor/common.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/armor/epic.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/armor/rare.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/armor/scarce.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/armor/uncommon.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/food/common.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/food/epic.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/food/rare.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/food/scarce.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/food/uncommon.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/items/epic.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/items/rare.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/items/scarce.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/items/uncommon.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/potions/common.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/potions/epic.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/potions/rare.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/potions/scarce.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/potions/uncommon.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/tools/common.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/tools/epic.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/tools/rare.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/tools/scarce.json create mode 100644 src/main/resources/loot_tables/treasure2/pools/tools/uncommon.json diff --git a/src/main/java/com/someguyssoftware/treasure2/Treasure.java b/src/main/java/com/someguyssoftware/treasure2/Treasure.java index a402876fe..98a5d5bae 100644 --- a/src/main/java/com/someguyssoftware/treasure2/Treasure.java +++ b/src/main/java/com/someguyssoftware/treasure2/Treasure.java @@ -52,7 +52,9 @@ import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2; import com.someguyssoftware.treasure2.loot.function.CharmRandomly; +import com.someguyssoftware.treasure2.loot.function.CharmRandomly2; import com.someguyssoftware.treasure2.loot.function.SetCharms; +import com.someguyssoftware.treasure2.loot.function.SetCharms2; import com.someguyssoftware.treasure2.meta.TreasureMetaManager; import com.someguyssoftware.treasure2.network.CharmMessageHandlerOnClient; import com.someguyssoftware.treasure2.network.CharmMessageToClient; @@ -206,9 +208,14 @@ public void preInt(FMLPreInitializationEvent event) { CapabilityManager.INSTANCE.register(IKeyRingCapability.class, new KeyRingStorage(), KeyRingCapability::new); CapabilityManager.INSTANCE.register(IEffectiveMaxDamageCapability.class, new EffectiveMaxDamageStorage(), EffectiveMaxDamageCapability::new); + // TODO remove these // register custom loot functions LootFunctionManager.registerFunction(new CharmRandomly.Serializer()); LootFunctionManager.registerFunction(new SetCharms.Serializer()); + + net.minecraft.world.storage.loot.functions.LootFunctionManager.registerFunction(new CharmRandomly2.Serializer()); + net.minecraft.world.storage.loot.functions.LootFunctionManager.registerFunction(new SetCharms2.Serializer()); + } /** diff --git a/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java index d8bb0b2cf..aebe7e07c 100644 --- a/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java @@ -79,34 +79,32 @@ public Object getServerGuiElement(int ID, EntityPlayer player, World world, int if (tileEntity instanceof ITreasureChestTileEntity) { ITreasureChestTileEntity chestTileEntity = (ITreasureChestTileEntity) tileEntity; -// logger.debug("is chest sealed -> {}", chestTileEntity.isSealed()); + logger.debug("is chest sealed -> {}", chestTileEntity.isSealed()); if (chestTileEntity.isSealed()) { chestTileEntity.setSealed(false); -// logger.debug("chest gen type -> {}", chestTileEntity.getGenerationContext().getChestGeneratorType()); + logger.debug("chest gen type -> {}", chestTileEntity.getGenerationContext().getChestGeneratorType()); // construct the chest generator used to create the tile entity IChestGenerator chestGenerator = chestTileEntity.getGenerationContext().getChestGeneratorType().getChestGenerator(); -// logger.debug("chest gen -> {}", chestTileEntity.getGenerationContext().getChestGeneratorType().getChestGenerator().getClass().getSimpleName()); + logger.debug("chest gen -> {}", chestTileEntity.getGenerationContext().getChestGeneratorType().getChestGenerator().getClass().getSimpleName()); - // TODO this loot selection will change - // - // TODO these details will be hidden behind another method + // fill the chest with loot + chestGenerator.fillChest(world, new Random(), tileEntity, chestTileEntity.getGenerationContext().getLootRarity(), player); + // select a loot table - LootTable lootTable = chestGenerator.selectLootTable(Random::new, chestTileEntity.getGenerationContext().getLootRarity()); - if (lootTable == null) { - logger.warn("Unable to select a lootTable."); - return null; - } - logger.debug("Generating loot from loot table for rarity {}", chestTileEntity.getGenerationContext().getLootRarity()); - LootContext lootContext = new LootContext.Builder((WorldServer) world, Treasure.LOOT_TABLES.getLootTableManager()) - .withLuck(player.getLuck()) - .withPlayer(player) - .build(); - if (lootContext == null) { - lootContext = Treasure.LOOT_TABLES.getContext(); - } - lootTable.fillInventory((IInventory) tileEntity, new Random(), lootContext); - - // TODO future IChestGenerator.addSpecialLoot(world, random, chestTileEntity); +// LootTable lootTable = chestGenerator.selectLootTable(Random::new, chestTileEntity.getGenerationContext().getLootRarity()); +// if (lootTable == null) { +// logger.warn("Unable to select a lootTable."); +// return null; +// } +// logger.debug("Generating loot from loot table for rarity {}", chestTileEntity.getGenerationContext().getLootRarity()); +// LootContext lootContext = new LootContext.Builder((WorldServer) world, Treasure.LOOT_TABLES.getLootTableManager()) +// .withLuck(player.getLuck()) +// .withPlayer(player) +// .build(); +// if (lootContext == null) { +// lootContext = Treasure.LOOT_TABLES.getContext(); +// } +// lootTable.fillInventory((IInventory) tileEntity, new Random(), lootContext); } } diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java index d8a5b7613..2952dd7c1 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java @@ -22,6 +22,10 @@ import net.minecraft.world.storage.loot.LootTableList; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.event.FMLServerStoppingEvent; +import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; /** @@ -40,13 +44,14 @@ public WorldEventHandler(IMod mod) { setMod(mod); } - @SubscribeEvent + @SubscribeEvent(priority = EventPriority.HIGH) public void onWorldLoad(WorldEvent.Load event) { -// Treasure.logger.debug("In world load event for dimension {}", event.getWorld().provider.getDimension()); + Treasure.logger.debug("In world load event for dimension {}", event.getWorld().provider.getDimension()); /* * On load of dimension 0 (overworld), initialize the loot table's context and other static loot tables */ + // TODO revisit this!!!! 1) not obeying multi-dimension rules 2) what if they saved off in a different dimension ? if (WorldInfo.isServerSide(event.getWorld()) && event.getWorld().provider.getDimension() == 0) { // Treasure.logger.debug("server event"); WorldServer world = (WorldServer) event.getWorld(); @@ -61,33 +66,33 @@ public void onWorldLoad(WorldEvent.Load event) { Treasure.LOOT_TABLE_MASTER.register(mod.getId()); // TEST /// - ResourceLocation loc = new ResourceLocation("treasure2", "test/one"); - Optional lootTableShell = Treasure.LOOT_TABLE_MASTER.loadLootTable(Treasure.LOOT_TABLE_MASTER.getWorldDataBaseFolder(), loc); - if (lootTableShell.isPresent()) { - Treasure.logger.debug("Found world data loot table with version -> {}, # of pools -> {}", lootTableShell.get().getVersion(), lootTableShell.get().getPools().size()); - // register it with MC - ResourceLocation newLoc = LootTableList.register(loc); - Treasure.logger.debug("registered world data loot table -> {}", newLoc); - LootTable table = world.getLootTableManager().getLootTableFromLocation(newLoc); - Treasure.logger.debug("got the loot table -> {}", table); - } - else { - Treasure.logger.debug("Couldn't find world data loot table -> {}", loc); - } +// ResourceLocation loc = new ResourceLocation("treasure2", "test/one"); +// Optional lootTableShell = Treasure.LOOT_TABLE_MASTER.loadLootTable(Treasure.LOOT_TABLE_MASTER.getWorldDataBaseFolder(), loc); +// if (lootTableShell.isPresent()) { +// Treasure.logger.debug("Found world data loot table with version -> {}, # of pools -> {}", lootTableShell.get().getVersion(), lootTableShell.get().getPools().size()); +// // register it with MC +// ResourceLocation newLoc = LootTableList.register(loc); +// Treasure.logger.debug("registered world data loot table -> {}", newLoc); +// LootTable table = world.getLootTableManager().getLootTableFromLocation(newLoc); +// Treasure.logger.debug("got the loot table -> {}", table); +// } +// else { +// Treasure.logger.debug("Couldn't find world data loot table -> {}", loc); +// } // END TEST /// /////////////////////////// // TODO deprecated calls Treasure.LOOT_TABLES.init(world); - Treasure.LOOT_TABLES.register(getMod().getId()); +// Treasure.LOOT_TABLES.register(getMod().getId()); // TODO deprecated system // register any foreign mod loot tables - for (String foreignModID : TreasureConfig.FOREIGN_MODS.enableForeignModIDs) { - if (Loader.isModLoaded(foreignModID)) { - Treasure.LOOT_TABLES.register(foreignModID); - } - } +// for (String foreignModID : TreasureConfig.FOREIGN_MODS.enableForeignModIDs) { +// if (Loader.isModLoaded(foreignModID)) { +// Treasure.LOOT_TABLES.register(foreignModID); +// } +// } // register files with their respective managers Treasure.META_MANAGER.register(getMod().getId()); @@ -113,11 +118,6 @@ public void onWorldLoad(WorldEvent.Load event) { } } - @SubscribeEvent - public void onWorldUnLoad(WorldEvent.Unload event) { - Treasure.LOOT_TABLE_MASTER.clear(); - } - /** * @return the mod */ diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java index 1eae8a679..26c47adca 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java @@ -4,10 +4,14 @@ package com.someguyssoftware.treasure2.generator.chest; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.Random; import java.util.function.Supplier; +import java.util.stream.Collectors; +import com.google.common.collect.Lists; import com.someguyssoftware.gottschcore.loot.LootTable; import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.gottschcore.random.RandomHelper; @@ -31,13 +35,24 @@ import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; import com.someguyssoftware.treasure2.lock.LockState; +import com.someguyssoftware.treasure2.loot.LootPoolShell; +import com.someguyssoftware.treasure2.loot.LootTableShell; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; +import com.someguyssoftware.treasure2.tileentity.ITreasureChestTileEntity; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootPool; +import net.minecraft.world.storage.loot.LootTableList; /** * @author Mark Gottschling on Dec 4, 2019 @@ -104,7 +119,17 @@ default public GeneratorResult generate(final World world, f default public List buildLootTableList(Rarity rarity) { return Treasure.LOOT_TABLES.getLootTableByRarity(rarity); } + + // TODO this should be a generic call that passes in ManagedTableType + default public List buildLootTableList2(Rarity rarity) { + Treasure.logger.debug("building loot table list (2) by rarity -> {}", rarity); + return Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(TreasureLootTableMaster2.ManagedTableType.CHEST, rarity); + } + default public Optional> buildInjectedLootTableList(String key, Rarity rarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getLootTableByKeyRarity(TreasureLootTableMaster2.ManagedTableType.INJECT, key, rarity)); + } + /** * * @param rarity @@ -132,6 +157,144 @@ default public AbstractChestBlock selectChest(final Random random, final Rarity return chest; } + /** + * + * @param world + * @param random + * @param tileEntity + * @param lootRarity + */ + default public void fillChest(final World world, Random random, final TileEntity tileEntity, final Rarity rarity, EntityPlayer player) { + // select a loot table + Optional lootTableShell = selectLootTable2(world, random, rarity); + Treasure.logger.debug("optional loottableshell object -> {}", lootTableShell); + net.minecraft.world.storage.loot.LootTable lootTable = null; + + if (lootTableShell.isPresent()) { + lootTable = world.getLootTableManager().getLootTableFromLocation(lootTableShell.get().getResourceLocation()); + Treasure.logger.debug("select loot table -> {} from resource -> {}", lootTable, lootTableShell.get().getResourceLocation()); + } + else { + Treasure.logger.debug("Unable to select a LootTable for rarity -> {}", rarity); + } + + if (lootTable == null) { + logger.warn("Unable to select a lootTable."); + return; + } + logger.debug("Generating loot from loot table for rarity {}", rarity); + + // setup lists of items + List treasureStacks = new ArrayList<>(); + List itemStacks = new ArrayList<>(); + + /* + * Using per loot table file - category strategy (instead of per pool strategy) + */ + // get a list of loot pools + List lootPoolShells = lootTableShell.get().getPools(); + if (lootPoolShells != null && lootPoolShells.size() > 0) { + logger.debug("# of pools -> {}", lootPoolShells.size()); + } + + // setup context + LootContext lootContext = new LootContext.Builder((WorldServer) world) + .withLuck(player.getLuck()) + .withPlayer(player) + .build(); + + for (LootPoolShell pool : lootPoolShells) { + logger.debug("processing pool -> {}", pool.getName()); + // go get the vanilla managed pool + LootPool lootPool = lootTable.getPool(pool.getName()); + + // geneate loot from pools + if (pool.getName().equalsIgnoreCase("treasure")) { + lootPool.generateLoot(treasureStacks, random, lootContext); + } + else { + lootPool.generateLoot(itemStacks, random, lootContext); + } + } + logger.debug("size of treasure stacks -> {}", treasureStacks.size()); + logger.debug("size of item stacks -> {}", itemStacks.size()); + + // record original item size (max number of items to pull from final list) + int lootItemSize = itemStacks.size(); + + // fetch all injected loot tables by + Optional> injectLootTableShells = buildInjectedLootTableList(lootTableShell.get().getCategory(), rarity); + if (injectLootTableShells.isPresent()) { + for (LootTableShell injectLootTableShell : injectLootTableShells.get()) { + // get the vanilla managed loot table + net.minecraft.world.storage.loot.LootTable injectLootTable = world.getLootTableManager().getLootTableFromLocation(injectLootTableShell.getResourceLocation()); + // add loot from tables to itemStacks + itemStacks.addAll(injectLootTable.generateLootForPools(random, lootContext)); + } + } + + // add the treasure items to the chest + fillInventory((IInventory) tileEntity, random, treasureStacks); + + // shuffle the items list + Collections.shuffle(itemStacks, random); + + // fill the chest with items + fillInventory((IInventory) tileEntity, random, itemStacks.stream().limit(lootItemSize).collect(Collectors.toList())); + } + + /** + * + * @param inventory + * @param random + * @param context + */ + default public void fillInventory(IInventory inventory, Random random, List list) { + List emptySlots = getEmptySlotsRandomized(inventory, random); + logger.debug("empty slots size -> {}", emptySlots.size()); + this.shuffleItems(list, emptySlots.size(), random); + + for (ItemStack itemstack : list) { + // if no more empty slots are available + if (emptySlots.isEmpty()) { + return; + } + + if (itemstack.isEmpty()) { + inventory.setInventorySlotContents(((Integer) emptySlots.remove(emptySlots.size() - 1)).intValue(), ItemStack.EMPTY); + } + else { + inventory.setInventorySlotContents(((Integer) emptySlots.remove(emptySlots.size() - 1)).intValue(), itemstack); + } + } + } + + /** + * + * @param inventory + * @param rand + * @return + */ + default public List getEmptySlotsRandomized(IInventory inventory, Random rand) { + List list = Lists.newArrayList(); + + for (int i = 0; i < inventory.getSizeInventory(); ++i) { + if (inventory.getStackInSlot(i).isEmpty()) { + list.add(Integer.valueOf(i)); + } + } + + Collections.shuffle(list, rand); + return list; + } + + /** + * shuffles items by changing their order (no stack splitting) + */ + default public void shuffleItems(List stacks, int emptySlotsSize, Random rand) { + Collections.shuffle(stacks, rand); + } + /** * * @param random @@ -158,13 +321,6 @@ default public LootTable selectLootTable(Random random, final Rarity rarity) { } return table; } - - /** - * - * @param tileEntity - * @param rarity - */ - public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rarity rarity); /** * @@ -172,6 +328,7 @@ default public LootTable selectLootTable(Random random, final Rarity rarity) { * @param rarity * @return */ + @Deprecated default public LootTable selectLootTable(Supplier factory, final Rarity rarity) { LootTable table = null; @@ -191,7 +348,41 @@ default public LootTable selectLootTable(Supplier factory, final Rarity } return table; } + + /** + * + * @param factory + * @param rarity + * @return + */ + default public Optional selectLootTable2(World world, Random random, final Rarity rarity) { + LootTableShell lootTableShell = null; + + // select the loot table by rarity + List tables = buildLootTableList2(rarity); + if (tables !=null)logger.debug("tables size -> {}", tables.size()); + + // select a random table from the list + if (tables != null && !tables.isEmpty()) { + int index = 0; + if (tables.size() == 1) { + lootTableShell = tables.get(0); + } else { + index = RandomHelper.randomInt(random, 0, tables.size() - 1); + lootTableShell = tables.get(index); + } + logger.debug("Selected loot table shell index --> {}", index); + } + return Optional.ofNullable(lootTableShell); + } + /** + * + * @param tileEntity + * @param rarity + */ + public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rarity rarity); + /** * * @param tileEntity diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java index 40637f4b7..cda6d271b 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java @@ -18,20 +18,17 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Random; import java.util.stream.Stream; import org.apache.commons.io.FilenameUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import com.google.common.collect.Lists; import com.google.common.io.Resources; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -42,8 +39,6 @@ import com.someguyssoftware.gottschcore.version.BuildVersion; import com.someguyssoftware.gottschcore.version.VersionChecker; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.world.WorldServer; import net.minecraft.world.storage.loot.LootTableManager; @@ -126,10 +121,10 @@ public void buildAndExpose(String resourceRootPath, String modID, List l public void register(WorldServer world, String modID, List locations) { // TODO copy files from config location to world data location if not there already - for (String location : locations) { - // get loot table files as ResourceLocations from the world data location - List locs = getLootTablesResourceLocations(modID, location); - } +// for (String location : locations) { +// // get loot table files as ResourceLocations from the world data location +// List locs = getLootTablesResourceLocations(modID, location); +// } // TODO finish } @@ -550,57 +545,6 @@ public Optional loadLootTable(File folder, ResourceLocation reso } } - /** - * - * @param inventory - * @param random - * @param context - */ - public void fillInventory(IInventory inventory, Random random, List list) { - List emptySlots = getEmptySlotsRandomized(inventory, random); - this.shuffleItems(list, emptySlots.size(), random); - - for (ItemStack itemstack : list) { - // if no more empty slots are available - if (emptySlots.isEmpty()) { - return; - } - - if (itemstack.isEmpty()) { - inventory.setInventorySlotContents(((Integer) emptySlots.remove(emptySlots.size() - 1)).intValue(), ItemStack.EMPTY); - } - else { - inventory.setInventorySlotContents(((Integer) emptySlots.remove(emptySlots.size() - 1)).intValue(), itemstack); - } - } - } - - /** - * - * @param inventory - * @param rand - * @return - */ - private List getEmptySlotsRandomized(IInventory inventory, Random rand) { - List list = Lists.newArrayList(); - - for (int i = 0; i < inventory.getSizeInventory(); ++i) { - if (inventory.getStackInSlot(i).isEmpty()) { - list.add(Integer.valueOf(i)); - } - } - - Collections.shuffle(list, rand); - return list; - } - - /** - * shuffles items by changing their order (no stack splitting) - */ - private void shuffleItems(List stacks, int emptySlotsSize, Random rand) { - Collections.shuffle(stacks, rand); - } - public File getWorldDataBaseFolder() { return worldDataBaseFolder; } diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java index f3e7b36f8..f62fa841e 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java @@ -3,20 +3,29 @@ */ package com.someguyssoftware.treasure2.loot; +import java.util.ArrayList; import java.util.List; +import net.minecraft.util.ResourceLocation; + /** * @author Mark Gottschling on Dec 1, 2020 * */ public class LootTableShell { + // currently, this class is not serialized by other serializers so transient is safe to use for Gson + private transient ResourceLocation resourceLocation; private String version; + private String category; private List categories; private List pools; public LootTableShell() {} public List getPools() { + if (pools == null) { + pools = new ArrayList<>(); + } return pools; } @@ -33,6 +42,12 @@ public void setVersion(String version) { } public List getCategories() { + if (categories == null) { + categories = new ArrayList(); + if (category != null && !category.isEmpty()) { + categories.add(category); + } + } return categories; } @@ -42,6 +57,22 @@ public void setCategories(List categories) { @Override public String toString() { - return "LootTableShell [version=" + version + ", categories=" + categories + "]"; + return "LootTableShell [version=" + version + ", categories=" + getCategories() + "]"; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public ResourceLocation getResourceLocation() { + return resourceLocation; + } + + public void setResourceLocation(ResourceLocation resourceLocation) { + this.resourceLocation = resourceLocation; } } diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java index 8d582df3d..0d1cab57b 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java @@ -89,20 +89,20 @@ public class TreasureLootTableMaster extends LootTableMaster { public TreasureLootTableMaster(IMod mod, String resourcePath, String folderName) { super(mod, resourcePath, folderName); - if (TreasureConfig.MOD.enableDefaultLootTablesCheck) { - buildAndExpose(Treasure.MODID); - for (String foreignModID : TreasureConfig.FOREIGN_MODS.enableForeignModIDs) { - if (Loader.isModLoaded(foreignModID)) { - buildAndExpose(foreignModID); - } - } - } - - // initialize the maps - for (Rarity r : Rarity.values()) { - CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.put(CUSTOM_LOOT_TABLE_KEY, r, new ArrayList()); - CHEST_LOOT_TABLES_TABLE.put(CUSTOM_LOOT_TABLE_KEY, r, new ArrayList()); - } +// if (TreasureConfig.MOD.enableDefaultLootTablesCheck) { +// buildAndExpose(Treasure.MODID); +// for (String foreignModID : TreasureConfig.FOREIGN_MODS.enableForeignModIDs) { +// if (Loader.isModLoaded(foreignModID)) { +// buildAndExpose(foreignModID); +// } +// } +// } +// +// // initialize the maps +// for (Rarity r : Rarity.values()) { +// CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.put(CUSTOM_LOOT_TABLE_KEY, r, new ArrayList()); +// CHEST_LOOT_TABLES_TABLE.put(CUSTOM_LOOT_TABLE_KEY, r, new ArrayList()); +// } } /** diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java index 384dcc296..7e6215ca0 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java @@ -16,6 +16,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Optional; import java.util.Set; @@ -38,15 +39,20 @@ * */ public class TreasureLootTableMaster2 extends LootTableMaster2 { + public static enum ManagedTableType { + CHEST, + INJECT + } + public static Logger LOGGER = LogManager.getLogger(Treasure.logger.getName()); - private static final String CUSTOM_LOOT_TABLES_RESOURCE_PATH = "/loot_tables/"; + public static final String CUSTOM_LOOT_TABLES_RESOURCE_PATH = "/loot_tables/"; public static final String CUSTOM_LOOT_TABLE_KEY = "CUSTOM"; /* * relative location of chest loot tables - in resource path or file system. * these are required folders. */ - private static final List CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( + public static final List CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( "chests/common", "chests/uncommon", "chests/scarce", @@ -58,7 +64,7 @@ public class TreasureLootTableMaster2 extends LootTableMaster2 { * list of special loot table locations. * this is a required folder. */ - private static final List SPECIAL_CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( + public static final List SPECIAL_CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( "chests/special" ); @@ -66,7 +72,7 @@ public class TreasureLootTableMaster2 extends LootTableMaster2 { * list of inject loot table locations. items from these loot tables will be injected into the final item pool for chests * these are required folders. */ - private static final List INJECT_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( + public static final List INJECT_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( "inject/common", "inject/uncommon", "inject/scarce", @@ -80,7 +86,7 @@ public class TreasureLootTableMaster2 extends LootTableMaster2 { * this is what treasure2 uses to organize items, it is not necessary to follow this format * in modded / added loot tables or supporting pools */ - private static final List POOL_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( + public static final List POOL_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( "pools/treasure", "pools/armor", "pools/food", @@ -92,11 +98,13 @@ public class TreasureLootTableMaster2 extends LootTableMaster2 { /* * Guava Table of loot table ResourceLocations for Chests based on LootTableManager-key and Rarity */ + @Deprecated private final Table> CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE = HashBasedTable.create(); /* * Guava Table of loot table ResourceLocations for Injects based on a category-key and Rarity */ + @Deprecated private final Table> INJECT_LOOT_TABLES_RESOURCE_LOCATION_TABLE = HashBasedTable.create(); @@ -144,7 +152,7 @@ public void clear() { } /** - * + * @deprecated moved to TreasureLootTableRegistry * @param modID */ private void buildAndExpose(String modID) { @@ -174,16 +182,22 @@ public void register(String modID) { // map the loot table resource location Rarity key = Rarity.valueOf(path.getName(path.getNameCount()-2).toString().toUpperCase()); // add to resourcemap - CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(resourceLocation); +// CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(resourceLocation); // create loot table Optional lootTable = loadLootTable(getWorldDataBaseFolder(), resourceLocation); if (lootTable.isPresent()) { + // add resource location to table + lootTable.get().setResourceLocation(resourceLocation); // add loot table to map CHEST_LOOT_TABLES_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(lootTable.get()); LOGGER.debug("tabling loot table: {} {} -> {}", CUSTOM_LOOT_TABLE_KEY, key, resourceLocation); } + else { + LOGGER.debug("unable to load loot table from -> {} : {}", getWorldDataBaseFolder(), resourceLocation); + } // register it with MC - LootTableList.register(resourceLocation); + ResourceLocation vanillaLoc = LootTableList.register(resourceLocation); + LOGGER.debug("vanillaLoc -> {}", vanillaLoc); } } @@ -260,7 +274,7 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th String destinationStr = dir.toString(); String partial = destinationStr.substring(destinationStr.indexOf(LOOT_TABLES_FOLDER) + LOOT_TABLES_FOLDER.length()); Path destinationFilePath = Paths.get(worldDataFilePath.toString(), partial); -// LOGGER.debug("destination folder to be tested/created -> {}", destinationFilePath.toString()); + LOGGER.debug("destination folder to be tested/created -> {}", destinationFilePath.toString()); if (Files.notExists(destinationFilePath)) { try { Files.createDirectories(destinationFilePath); @@ -274,12 +288,12 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { -// LOGGER.debug("walking file -> {}", file.toString()); + LOGGER.debug("walking file -> {}", file.toString()); fileList.add(file.getFileName().toString()); String destinationStr = file.toString(); String partial = destinationStr.substring(destinationStr.indexOf(LOOT_TABLES_FOLDER) + LOOT_TABLES_FOLDER.length()); Path destinationFilePath = Paths.get(worldDataFilePath.toString(), partial); -// LOGGER.debug("new destination -> {}", destinationFilePath.toString()); + LOGGER.debug("new destination -> {}", destinationFilePath.toString()); if (Files.notExists(destinationFilePath)) { // copy from resource/classpath to file path try { @@ -309,6 +323,74 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) } } + /** + * + * @param rarity + * @return + */ + public List getLootTableByRarity(Rarity rarity) { + // get all loot tables by column key + List tables = new ArrayList<>(); + Map> mapOfLootTables = CHEST_LOOT_TABLES_TABLE.column(rarity); + // convert to a single list + for(Entry> n : mapOfLootTables.entrySet()) { + Treasure.logger.debug("Adding table shell entry to loot table list -> {} {}: size {}", rarity, n.getKey(), n.getValue().size()); + tables.addAll(n.getValue()); + } + return tables; + } + + /** + * + * @param tableType + * @param rarity + * @return + */ + public List getLootTableByRarity(ManagedTableType tableType, Rarity rarity) { + Treasure.logger.debug("managed table type -> {}", tableType); + Table> table = (tableType == ManagedTableType.CHEST) ? CHEST_LOOT_TABLES_TABLE : INJECT_LOOT_TABLES_TABLE; + // get all loot tables by column key + List tables = new ArrayList<>(); + Map> mapOfLootTables = table.column(rarity); + // convert to a single list + for(Entry> n : mapOfLootTables.entrySet()) { + Treasure.logger.debug("Adding table shell entry to loot table list -> {} {}: size {}", rarity, n.getKey(), n.getValue().size()); + tables.addAll(n.getValue()); + } + return tables; + } + + /** + * + * @param tableType + * @param key + * @param rarity + * @return + */ + public List getLootTableByKeyRarity(ManagedTableType tableType, String key, Rarity rarity) { + Table> table = (tableType == ManagedTableType.CHEST) ? CHEST_LOOT_TABLES_TABLE : INJECT_LOOT_TABLES_TABLE; + // get all loot tables by column key + List tables = table.get(key, rarity); + return tables; + } + + /** + * + * @param rarity + * @return + */ + @Deprecated + public List getLootTableResourceByRarity(Rarity rarity) { + // get all loot tables by column key + List tables = new ArrayList<>(); + Map> mapOfLootTableResourceLocations = CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.column(rarity); + // convert to a single list + for(Entry> n : mapOfLootTableResourceLocations.entrySet()) { + tables.addAll(n.getValue()); + } + return tables; + } + /** * * @param tableEnum diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableRegistry.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableRegistry.java new file mode 100644 index 000000000..a0adffcef --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableRegistry.java @@ -0,0 +1,50 @@ +/** + * + */ +package com.someguyssoftware.treasure2.loot; + +import java.util.List; + +import javax.annotation.Nullable; + +import com.someguyssoftware.treasure2.Treasure; + +/** + * Use this registry to register all your mod's custom loot table for Treasure2. + * @author Mark Gottschling on Dec 4, 2020 + * + */ +public final class TreasureLootTableRegistry { + + /** + * + * @param modID + */ + public static void register(final String modID) { + buildAndExpose(modID); + Treasure.LOOT_TABLE_MASTER.register(modID); + } + + /** + * + * @param modID + * @param customFolders + */ + public static void register(final String modID, final @Nullable List customFolders) { + if (customFolders != null && !customFolders.isEmpty()) { + Treasure.LOOT_TABLE_MASTER.buildAndExpose(TreasureLootTableMaster2.CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, customFolders); + } + register(modID); + } + + /** + * + * @param modID + */ + private static void buildAndExpose(String modID) { + Treasure.LOOT_TABLE_MASTER.buildAndExpose(TreasureLootTableMaster2.CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, TreasureLootTableMaster2.CHEST_LOOT_TABLE_FOLDER_LOCATIONS); + Treasure.LOOT_TABLE_MASTER.buildAndExpose(TreasureLootTableMaster2.CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, TreasureLootTableMaster2.SPECIAL_CHEST_LOOT_TABLE_FOLDER_LOCATIONS); + Treasure.LOOT_TABLE_MASTER.buildAndExpose(TreasureLootTableMaster2.CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, TreasureLootTableMaster2.POOL_LOOT_TABLE_FOLDER_LOCATIONS); + Treasure.LOOT_TABLE_MASTER.buildAndExpose(TreasureLootTableMaster2.CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, TreasureLootTableMaster2.INJECT_LOOT_TABLE_FOLDER_LOCATIONS); + } +} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly2.java b/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly2.java new file mode 100644 index 000000000..dcf2ed7c4 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly2.java @@ -0,0 +1,153 @@ +/** + * + */ +package com.someguyssoftware.treasure2.loot.function; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import javax.annotation.Nullable; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.someguyssoftware.treasure2.Treasure; +import com.someguyssoftware.treasure2.capability.CharmCapabilityProvider; +import com.someguyssoftware.treasure2.capability.ICharmCapability; +import com.someguyssoftware.treasure2.item.charm.CharmLevel; +import com.someguyssoftware.treasure2.item.charm.CharmStateFactory; +import com.someguyssoftware.treasure2.item.charm.CharmType; +import com.someguyssoftware.treasure2.item.charm.ICharm; +import com.someguyssoftware.treasure2.item.charm.ICharmState; +import com.someguyssoftware.treasure2.item.charm.TreasureCharms; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.conditions.LootCondition; +import net.minecraft.world.storage.loot.functions.LootFunction; + +/** + * @author Mark Gottschling on May 1, 2020 + * @param + * + */ +public class CharmRandomly2 extends LootFunction { + private List charms; + + /** + * + * @param conditions + * @param charms + */ + public CharmRandomly2(LootCondition[] conditions, @Nullable List charms) { + super(conditions); + this.charms = charms == null ? Collections.emptyList() : charms; + } + + @Override + public ItemStack apply(ItemStack stack, Random rand, LootContext context) { + ICharm charm = null; + + // ensure that the stack has charm capabilities + if (stack.hasCapability(CharmCapabilityProvider.CHARM_CAPABILITY, null)) { + ICharmCapability provider = stack.getCapability(CharmCapabilityProvider.CHARM_CAPABILITY, null); + List charmStates = provider.getCharmStates(); + + if (this.charms.isEmpty()) { + List tempCharms = new ArrayList<>(); + // if charms list is empty, create a default list of minor charms + for (ICharm c : TreasureCharms.REGISTRY.values()) { + if (c.getCharmLevel() == CharmLevel.LEVEL1 || c.getCharmLevel() == CharmLevel.LEVEL2) { + tempCharms.add(c); + } + } + if (!tempCharms.isEmpty()) { + // select a charm randomly + charm = tempCharms.get(rand.nextInt(tempCharms.size())); + } + } + else { + // select a charm randomly + charm =this.charms.get(rand.nextInt(this.charms.size())); + Treasure.logger.debug("selected charm for item -> {}", charm.getName()); + } + if (charm != null) { + // ensure that the item doesn't already have the same charm or same type or exceeded the maximum charms. + boolean hasCharm = false; + for (ICharmState state : charmStates) { + if (state.getCharm().getCharmType() == charm.getCharmType() || + state.getCharm().getName().equals(charm.getName())) { + hasCharm = true; + break; + } + } + if (!hasCharm) { + charmStates.add(CharmStateFactory.createCharmState(charm)); + } + } + } + return stack; + } + + /** + * + * @author Mark Gottschling on May 1, 2020 + * + */ + public static class Serializer extends LootFunction.Serializer { + public Serializer() { + super(new ResourceLocation("treasure2:charm_randomly2"), CharmRandomly2.class); + } + + /** + * + */ + public void serialize(JsonObject json, CharmRandomly2 value, JsonSerializationContext context) { + if (!value.charms.isEmpty()) { + JsonArray jsonArray = new JsonArray(); + for (ICharm charm : value.charms) { + jsonArray.add(new JsonPrimitive(charm.getName())); + } + json.add("charms", jsonArray); + } + } + + /** + * + */ + public CharmRandomly2 deserialize(JsonObject json, JsonDeserializationContext deserializationContext, + LootCondition[] conditionsIn) { + Map charmsByType = new HashMap<>(10); + List list = Lists.newArrayList(); + + if (json.has("charms")) { + for (JsonElement element : JsonUtils.getJsonArray(json, "charms")) { + String charmName = JsonUtils.getString(element, "charm"); + ICharm charm = TreasureCharms.REGISTRY.get(charmName); + + if (charm == null) { + Treasure.logger.warn("Unknown charm '{}'", charmName); + } + + // add to the map + if (!charmsByType.containsKey(charm.getCharmType())) { + charmsByType.put(charm.getCharmType(), charm); + // add to the list of charms + list.add(charm); + } + } + } + return new CharmRandomly2(conditionsIn, list); + } + } +} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms.java b/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms.java index 9236c6ac6..eab95f8f9 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms.java @@ -26,7 +26,6 @@ import com.someguyssoftware.treasure2.capability.CharmCapabilityProvider; import com.someguyssoftware.treasure2.capability.ICharmCapability; import com.someguyssoftware.treasure2.item.charm.CharmLevel; -import com.someguyssoftware.treasure2.item.charm.CharmState; import com.someguyssoftware.treasure2.item.charm.CharmStateFactory; import com.someguyssoftware.treasure2.item.charm.CharmType; import com.someguyssoftware.treasure2.item.charm.ICharm; diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms2.java b/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms2.java new file mode 100644 index 000000000..7b26e9c0e --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms2.java @@ -0,0 +1,158 @@ +/** + * + */ +package com.someguyssoftware.treasure2.loot.function; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import javax.annotation.Nullable; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; + +import com.someguyssoftware.treasure2.Treasure; +import com.someguyssoftware.treasure2.capability.CharmCapabilityProvider; +import com.someguyssoftware.treasure2.capability.ICharmCapability; +import com.someguyssoftware.treasure2.item.charm.CharmLevel; +import com.someguyssoftware.treasure2.item.charm.CharmState; +import com.someguyssoftware.treasure2.item.charm.CharmStateFactory; +import com.someguyssoftware.treasure2.item.charm.CharmType; +import com.someguyssoftware.treasure2.item.charm.ICharm; +import com.someguyssoftware.treasure2.item.charm.ICharmState; +import com.someguyssoftware.treasure2.item.charm.TreasureCharms; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.conditions.LootCondition; +import net.minecraft.world.storage.loot.functions.LootFunction; + +/** + * + * @author Mark Gottschling on May 2, 2020 + * + */ +public class SetCharms2 extends LootFunction { + private List charms; + + /** + * + * @param conditions + * @param charms + */ + public SetCharms2(LootCondition[] conditions, @Nullable List charms) { + super(conditions); + this.charms = charms == null ? Collections.emptyList() : charms; + } + + @Override + public ItemStack apply(ItemStack stack, Random rand, LootContext context) { + + // ensure that the stack has charm capabilities + if (stack.hasCapability(CharmCapabilityProvider.CHARM_CAPABILITY, null)) { + ICharmCapability provider = stack.getCapability(CharmCapabilityProvider.CHARM_CAPABILITY, null); + List charmStates = provider.getCharmStates(); + + if (!this.charms.isEmpty()) { + for (ICharm charm : charms) { + // ensure that the item doesn't already have the same charm or same type or exceeded the maximum charms. + boolean hasCharm = false; + for (ICharmState state : charmStates) { + if (state.getCharm().getCharmType() == charm.getCharmType() || + state.getCharm().getName().equals(charm.getName())) { + Treasure.logger.debug("item already has charm -> {}", charm.getName()); + hasCharm = true; + break; + } + } + if (!hasCharm) { + Treasure.logger.debug("giving item charm -> {}", charm.getName()); + charmStates.add(CharmStateFactory.createCharmState(charm)); + } + } + } + else { + // randomly add a charm (in case loot table is misconfigured) + List tempCharms = new ArrayList<>(); + // if charms list is empty, create a default list of minor charms + for (ICharm c : TreasureCharms.REGISTRY.values()) { + if (c.getCharmLevel() == CharmLevel.LEVEL1 || c.getCharmLevel() == CharmLevel.LEVEL2) { + tempCharms.add(c); + } + } + if (!tempCharms.isEmpty()) { + // select a charm randomly + ICharm charm = tempCharms.get(rand.nextInt(tempCharms.size())); + Treasure.logger.debug("giving item a random charm -> {}", charm.getName()); + charmStates.add(CharmStateFactory.createCharmState(charm)); + } + } + } + return stack; + } + + /** + * + * @author Mark Gottschling on May 2, 2020 + * + */ + public static class Serializer extends LootFunction.Serializer { + public Serializer() { + super(new ResourceLocation("treasure2:set_charms2"), SetCharms2.class); + } + + /** + * + */ + public void serialize(JsonObject json, SetCharms2 value, JsonSerializationContext context) { + if (!value.charms.isEmpty()) { + JsonArray jsonArray = new JsonArray(); + for (ICharm charm : value.charms) { + jsonArray.add(new JsonPrimitive(charm.getName())); + } + json.add("charms", jsonArray); + } + } + + /** + * + */ + public SetCharms2 deserialize(JsonObject json, JsonDeserializationContext deserializationContext, + LootCondition[] conditionsIn) { + Map charmsByType = new HashMap<>(10); + List list = Lists.newArrayList(); + + if (json.has("charms")) { + for (JsonElement element : JsonUtils.getJsonArray(json, "charms")) { + String charmName = JsonUtils.getString(element, "charm"); + ICharm charm = TreasureCharms.REGISTRY.get(charmName); + + if (charm == null) { + Treasure.logger.warn("Unknown charm '{}'", charmName); + System.out.println("Unknown charm '" + charmName + "'"); + } + + // add to the map + if (!charmsByType.containsKey(charm.getCharmType())) { + charmsByType.put(charm.getCharmType(), charm); + // add to the list of charms + list.add(charm); + Treasure.logger.debug("adding charm to charm list -> {}", charm.getName()); + } + } + } + return new SetCharms2(conditionsIn, list); + } + } +} diff --git a/src/main/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json index 4d5f7fc19..b37b8f3b8 100644 --- a/src/main/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json @@ -1,4 +1,5 @@ { "version" : "1.0.0", + "category": "armor", "pools": [ { "name": "treasure", @@ -6,7 +7,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/common", + "name": "treasure2:pools/treasure/common", "weight": 30 } ] @@ -20,7 +21,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/common", + "name": "treasure2:pools/items/common", "weight": 1 } ] @@ -34,7 +35,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/common", + "name": "treasure2:pools/armor/common", "weight": 1 } ] @@ -48,7 +49,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/common", + "name": "treasure2:pools/tools/common", "weight": 1 } ] diff --git a/src/main/resources/loot_tables/treasure2/chests/common/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/common/food_potion_chest.json index 8995fc194..071ca0b59 100644 --- a/src/main/resources/loot_tables/treasure2/chests/common/food_potion_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/common/food_potion_chest.json @@ -1,5 +1,6 @@ { "version" : "1.0.0", + "category": "food", "pools": [ { "name": "treasure", @@ -7,7 +8,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/common", + "name": "treasure2:pools/treasure/common", "weight": 30 } ] @@ -21,7 +22,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/common", + "name": "treasure2:pools/items/common", "weight": 1 } ] @@ -33,7 +34,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/common", + "name": "treasure2:pools/food/common", "weight": 1 } ] @@ -49,7 +50,7 @@ { "entryName": "common_potion", "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/common", + "name": "treasure2:pools/potions/common", "weight": 1 } ] diff --git a/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json index 28a4f4a6a..b98be50b6 100644 --- a/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json @@ -1,5 +1,6 @@ { "version" : "1.0.0", + "category": "general", "pools": [ { "name": "treasure", diff --git a/src/main/resources/loot_tables/treasure2/chests/epic/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/epic/general_chest.json index f33a0f050..37c5dd827 100644 --- a/src/main/resources/loot_tables/treasure2/chests/epic/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/epic/general_chest.json @@ -1,5 +1,6 @@ { "version": "1.0", + "category": "general", "pools": [ { "name": "treasure", diff --git a/src/main/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json index ddfcd942b..591677696 100644 --- a/src/main/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json @@ -1,5 +1,6 @@ { "version": "1.0", + "category": "armor", "pools": [ { "name": "treasure", diff --git a/src/main/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json index 2b64afca2..49fadc079 100644 --- a/src/main/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json @@ -1,5 +1,6 @@ { "version": "1.0", + "category": "food", "pools": [ { "name": "treasure", diff --git a/src/main/resources/loot_tables/treasure2/chests/rare/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/rare/general_chest.json index 1888def5f..8d9c27db1 100644 --- a/src/main/resources/loot_tables/treasure2/chests/rare/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/rare/general_chest.json @@ -1,5 +1,6 @@ { "version": "1.0", + "category": "general", "pools": [ { "name": "treasure", diff --git a/src/main/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json index 1c1b0b392..d5601f9f0 100644 --- a/src/main/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json @@ -1,5 +1,6 @@ { "version": "1.0", + "category": "armor", "pools": [ { "name": "treasure", diff --git a/src/main/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json index 277d012e1..3eab355aa 100644 --- a/src/main/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json @@ -1,5 +1,6 @@ { "version": "1.0", + "category": "food", "pools": [ { "name": "treasure", diff --git a/src/main/resources/loot_tables/treasure2/chests/scarce/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/scarce/general_chest.json index 759cd4aa8..2a55c46fc 100644 --- a/src/main/resources/loot_tables/treasure2/chests/scarce/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/scarce/general_chest.json @@ -1,5 +1,6 @@ { "version": "1.0", + "category": "general", "pools": [ { "name": "treasure", diff --git a/src/main/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json index 82ab76c6f..987ade73c 100644 --- a/src/main/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json @@ -1,5 +1,6 @@ { "version": "1.0", + "category": "armor", "pools": [ { "name": "treasure", @@ -7,7 +8,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/uncommon", + "name": "treasure2:pools/treasure/uncommon", "weight": 30 } ] @@ -18,7 +19,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/uncommon_charms", + "name": "treasure2:pools/treasure/uncommon_charms", "weight": 1 } ] @@ -32,7 +33,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/uncommon", + "name": "treasure2:pools/items/uncommon", "weight": 1 } ] @@ -46,7 +47,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/uncommon", + "name": "treasure2:pools/armor/uncommon", "weight": 1 } ] @@ -60,7 +61,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/uncommon", + "name": "treasure2:pools/food/uncommon", "weight": 1 } ] @@ -71,7 +72,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/uncommon", + "name": "treasure2:pools/tools/uncommon", "weight": 1 } ] @@ -86,7 +87,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/common", + "name": "treasure2:pools/items/common", "weight": 1 } ] @@ -100,7 +101,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/common", + "name": "treasure2:pools/armor/common", "weight": 1 } ] @@ -114,7 +115,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/common", + "name": "treasure2:pools/food/common", "weight": 1 } ] @@ -128,7 +129,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/common", + "name": "treasure2:pools/tools/common", "weight": 1 } ] diff --git a/src/main/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json index bf321b7a3..d23ceea6a 100644 --- a/src/main/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json @@ -1,5 +1,6 @@ { "version": "1.0", + "category": "food", "pools": [ { "name": "treasure", @@ -7,7 +8,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/uncommon", + "name": "treasure2:pools/treasure/uncommon", "weight": 30 } ] @@ -18,7 +19,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/uncommon_charms", + "name": "treasure2:pools/treasure/uncommon_charms", "weight": 1 } ] @@ -32,7 +33,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/uncommon", + "name": "treasure2:pools/items/uncommon", "weight": 1 } ] @@ -47,7 +48,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/uncommon", + "name": "treasure2:pools/food/uncommon", "weight": 1 } ] @@ -62,7 +63,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/uncommon", + "name": "treasure2:pools/potions/uncommon", "weight": 1 } ] @@ -76,7 +77,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/common", + "name": "treasure2:pools/items/common", "weight": 1 } ] @@ -91,7 +92,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/common", + "name": "treasure2:pools/food/common", "weight": 1 } ] @@ -106,7 +107,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/common", + "name": "treasure2:pools/potions/common", "weight": 1 } ] diff --git a/src/main/resources/loot_tables/treasure2/chests/uncommon/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/uncommon/general_chest.json index 22e79ccf4..67a980892 100644 --- a/src/main/resources/loot_tables/treasure2/chests/uncommon/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/uncommon/general_chest.json @@ -1,5 +1,6 @@ { "version": "1.0", + "category": "general", "pools": [ { "name": "treasure", @@ -7,7 +8,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/uncommon", + "name": "treasure2:pools/treasure/uncommon", "weight": 30 } ] @@ -18,7 +19,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/uncommon_charms", + "name": "treasure2:pools/treasure/uncommon_charms", "weight": 1 } ] @@ -32,7 +33,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/uncommon", + "name": "treasure2:pools/items/uncommon", "weight": 1 } ] @@ -46,7 +47,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/uncommon", + "name": "treasure2:pools/armor/uncommon", "weight": 1 } ] @@ -60,7 +61,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/uncommon", + "name": "treasure2:pools/food/uncommon", "weight": 1 } ] @@ -74,7 +75,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/uncommon", + "name": "treasure2:pools/tools/uncommon", "weight": 1 } ] @@ -88,7 +89,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/uncommon", + "name": "treasure2:pools/potions/uncommon", "weight": 1 } ] @@ -103,7 +104,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/common", + "name": "treasure2:pools/items/common", "weight": 1 } ] @@ -117,7 +118,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/common", + "name": "treasure2:pools/armor/common", "weight": 1 } ] @@ -131,7 +132,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/common", + "name": "treasure2:pools/food/common", "weight": 1 } ] @@ -145,7 +146,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/common", + "name": "treasure2:pools/tools/common", "weight": 1 } ] @@ -159,7 +160,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/common", + "name": "treasure2:pools/potions/common", "weight": 1 } ] diff --git a/src/main/resources/loot_tables/treasure2/inject/common/items.json b/src/main/resources/loot_tables/treasure2/inject/common/items.json index e5a113937..4410f7f8e 100644 --- a/src/main/resources/loot_tables/treasure2/inject/common/items.json +++ b/src/main/resources/loot_tables/treasure2/inject/common/items.json @@ -1,6 +1,6 @@ { "version": "1.0", - "category": ["items"], + "categories": ["items"], "pools": [ { "name": "common_items", diff --git a/src/main/resources/loot_tables/treasure2/pools/armor/common.json b/src/main/resources/loot_tables/treasure2/pools/armor/common.json new file mode 100644 index 000000000..2d260678d --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/armor/common.json @@ -0,0 +1,59 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "common_armor", + "rolls": 1, + "entries": [ + { + "entryName": "leather_chestplate", + "type": "item", + "name": "minecraft:leather_chestplate", + "weight": 20 + }, + { + "entryName": "leather_leggings", + "type": "item", + "name": "minecraft:leather_leggings", + "weight": 20 + }, + { + "entryName": "leather_helmet", + "type": "item", + "name": "minecraft:leather_helmet", + "weight": 20 + }, + { + "entryName": "leather_boots", + "type": "item", + "name": "minecraft:leather_boots", + "weight": 20 + }, + { + "entryName": "golden_chestplate", + "type": "item", + "name": "minecraft:golden_chestplate", + "weight": 10 + }, + { + "entryName": "golden_leggings", + "type": "item", + "name": "minecraft:golden_leggings", + "weight": 10 + }, + { + "entryName": "golden_helmet", + "type": "item", + "name": "minecraft:golden_helmet", + "weight": 10 + }, + { + "entryName": "golden_boots", + "type": "item", + "name": "minecraft:golden_boots", + "weight": 10 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/armor/epic.json b/src/main/resources/loot_tables/treasure2/pools/armor/epic.json new file mode 100644 index 000000000..3c403d788 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/armor/epic.json @@ -0,0 +1,133 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "epic_armor", + "rolls": 1, + "entries": [ + { + "entryName": "diamond_chestplate", + "type": "item", + "name": "minecraft:diamond_chestplate", + "weight": 18, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "entryName": "diamond_leggings", + "type": "item", + "name": "minecraft:diamond_leggings", + "weight": 22, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "entryName": "diamond_helmet", + "type": "item", + "name": "minecraft:diamond_helmet", + "weight": 22, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "entryName": "diamond_boots", + "type": "item", + "name": "minecraft:diamond_boots", + "weight": 22, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "entryName": "iron_chestplate", + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 35, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + }, + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "iron_leggings", + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 35, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + }, + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "iron_helmet", + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 35, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + }, + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "iron_boots", + "type": "item", + "name": "minecraft:iron_boots", + "weight": 35, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + }, + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "diamond_horse_armor", + "type": "item", + "name": "minecraft:diamond_horse_armor", + "weight": 25 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/armor/rare.json b/src/main/resources/loot_tables/treasure2/pools/armor/rare.json new file mode 100644 index 000000000..1d91e8cbe --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/armor/rare.json @@ -0,0 +1,87 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "rare_armor", + "rolls": 1, + "entries": [ + { + "entryName": "diamond_chestplate", + "type": "item", + "name": "minecraft:diamond_chestplate", + "weight": 10 + }, + { + "entryName": "diamond_leggings", + "type": "item", + "name": "minecraft:diamond_leggings", + "weight": 10 + }, + { + "entryName": "diamond_helmet", + "type": "item", + "name": "minecraft:diamond_helmet", + "weight": 10 + }, + { + "entryName": "diamond_boots", + "type": "item", + "name": "minecraft:diamond_boots", + "weight": 10 + }, + { + "entryName": "iron_chestplate", + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 15, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "entryName": "iron_leggings", + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 15, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "entryName": "iron_helmet", + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 20, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "entryName": "iron_boots", + "type": "item", + "name": "minecraft:iron_boots", + "weight": 20, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/armor/scarce.json b/src/main/resources/loot_tables/treasure2/pools/armor/scarce.json new file mode 100644 index 000000000..a1d37ed00 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/armor/scarce.json @@ -0,0 +1,117 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "scarce_armor", + "rolls": 1, + "entries": [ + { + "entryName": "iron_chestplate", + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 20, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "iron_leggings", + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 20, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "iron_helmet", + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 20, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "iron_boots", + "type": "item", + "name": "minecraft:iron_boots", + "weight": 20, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "shield", + "type": "item", + "name": "minecraft:shield", + "weight": 10 + }, + { + "entryName": "leather_chestplate", + "type": "item", + "name": "minecraft:leather_chestplate", + "weight": 15, + "functions": [ + { + "function": "enchant_randomly" + }, + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "leather_leggings", + "type": "item", + "name": "minecraft:leather_leggings", + "weight": 15, + "functions": [ + { + "function": "enchant_randomly" + }, + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "leather_helmet", + "type": "item", + "name": "minecraft:leather_helmet", + "weight": 15, + "functions": [ + { + "function": "enchant_randomly" + }, + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "leather_boots", + "type": "item", + "name": "minecraft:leather_boots", + "weight": 15, + "functions": [ + { + "function": "enchant_randomly" + }, + { + "function": "enchant_randomly" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/armor/uncommon.json b/src/main/resources/loot_tables/treasure2/pools/armor/uncommon.json new file mode 100644 index 000000000..3b4856fa8 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/armor/uncommon.json @@ -0,0 +1,85 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "uncommon_armor", + "rolls": 1, + "entries": [ + { + "entryName": "iron_chestplate", + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 12.5 + }, + { + "entryName": "iron_leggings", + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 20 + }, + { + "entryName": "iron_helmet", + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 20 + }, + { + "entryName": "iron_boots", + "type": "item", + "name": "minecraft:iron_boots", + "weight": 20 + }, + { + "entryName": "shield", + "type": "item", + "name": "minecraft:shield", + "weight": 20 + }, + { + "entryName": "golden_chestplate", + "type": "item", + "name": "minecraft:golden_chestplate", + "weight": 10, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "golden_leggings", + "type": "item", + "name": "minecraft:golden_leggings", + "weight": 10, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "golden_helmet", + "type": "item", + "name": "minecraft:golden_helmet", + "weight": 10, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "golden_boots", + "type": "item", + "name": "minecraft:golden_boots", + "weight": 10, + "functions": [ + { + "function": "enchant_randomly" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/food/common.json b/src/main/resources/loot_tables/treasure2/pools/food/common.json new file mode 100644 index 000000000..17ccf2fd0 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/food/common.json @@ -0,0 +1,248 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "common_food", + "rolls": 1, + "entries": [ + { + "entryName": "apple", + "type": "item", + "name": "minecraft:apple", + "weight": 80, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "wheat", + "type": "item", + "name": "minecraft:wheat", + "weight": 80, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "entryName": "wheat_seeds", + "type": "item", + "name": "minecraft:wheat_seeds", + "weight": 80, + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "entryName": "brown_mushroom", + "type": "item", + "name": "minecraft:brown_mushroom", + "weight": 80, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "red_mushroom", + "type": "item", + "name": "minecraft:red_mushroom", + "weight": 80, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "porkchop", + "type": "item", + "name": "minecraft:porkchop", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "rabbit", + "type": "item", + "name": "minecraft:rabbit", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "egg", + "type": "item", + "name": "minecraft:egg", + "weight": 80, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "chicken", + "type": "item", + "name": "minecraft:chicken", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "fish", + "type": "item", + "name": "minecraft:fish", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "cooked_fish", + "type": "item", + "name": "minecraft:cooked_fish", + "weight": 30, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "beef", + "type": "item", + "name": "minecraft:beef", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "pumpkin", + "type": "item", + "name": "minecraft:pumpkin", + "weight": 15 + }, + { + "entryName": "pumpkin_seeds", + "type": "item", + "name": "minecraft:pumpkin_seeds", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "melon", + "type": "item", + "name": "minecraft:melon", + "weight": 10 + }, + { + "entryName": "melon_seeds", + "type": "item", + "name": "minecraft:melon_seeds", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "mutton", + "type": "item", + "name": "minecraft:mutton", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/food/epic.json b/src/main/resources/loot_tables/treasure2/pools/food/epic.json new file mode 100644 index 000000000..24dc1e093 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/food/epic.json @@ -0,0 +1,23 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "epic_food", + "rolls": 1, + "entries": [ + { + "entryName": "golden_apple", + "type": "item", + "name": "minecraft:golden_apple", + "weight": 50 + }, + { + "entryName": "golden_carrot", + "type": "item", + "name": "minecraft:golden_carrot", + "weight": 50 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/food/rare.json b/src/main/resources/loot_tables/treasure2/pools/food/rare.json new file mode 100644 index 000000000..0fe05bb93 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/food/rare.json @@ -0,0 +1,68 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "rare_food", + "rolls": 1, + "entries": [ + { + "entryName": "rabbit_foot", + "type": "item", + "name": "minecraft:rabbit_foot", + "weight": 25 + }, + { + "entryName": "potato", + "type": "item", + "name": "minecraft:potato", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "speckled_melon", + "type": "item", + "name": "minecraft:speckled_melon", + "weight": 15 + }, + { + "entryName": "beetroot", + "type": "item", + "name": "minecraft:beetroot", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "beetroot_seed", + "type": "item", + "name": "minecraft:beetroot_seeds", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/food/scarce.json b/src/main/resources/loot_tables/treasure2/pools/food/scarce.json new file mode 100644 index 000000000..cbb2c8475 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/food/scarce.json @@ -0,0 +1,23 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "scarce_food", + "rolls": 1, + "entries": [ + { + "entryName": "cake", + "type": "item", + "name": "minecraft:cake", + "weight": 50 + }, + { + "entryName": "pumpkin_pie", + "type": "item", + "name": "minecraft:pumpkin_pie", + "weight": 50 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/food/uncommon.json b/src/main/resources/loot_tables/treasure2/pools/food/uncommon.json new file mode 100644 index 000000000..2183a3104 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/food/uncommon.json @@ -0,0 +1,75 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "uncommon_food", + "rolls": 1, + "entries": [ + { + "entryName": "sugar", + "type": "item", + "name": "minecraft:sugar", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "carrot", + "type": "item", + "name": "minecraft:carrot", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "cocoa_beans", + "type": "item", + "name": "minecraft:dye", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + }, + { + "function": "set_data", + "data": 3 + } + ] + }, + { + "entryName": "cookie", + "type": "item", + "name": "minecraft:cookie", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/items/epic.json b/src/main/resources/loot_tables/treasure2/pools/items/epic.json new file mode 100644 index 000000000..70e227811 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/items/epic.json @@ -0,0 +1,137 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "epic_items", + "rolls": 1, + "entries": [ + { + "entryName": "shulker_box", + "type": "item", + "name": "minecraft:black_shulker_box", + "weight": 15 + }, + { + "entryName": "shulker_shell", + "type": "item", + "name": "minecraft:shulker_shell", + "weight": 20 + }, + { + "entryName": "dragon_breath", + "type": "item", + "name": "minecraft:dragon_breath", + "weight": 15 + }, + { + "entryName": "elytra", + "type": "item", + "name": "minecraft:elytra", + "weight": 10 + }, + { + "entryName": "totem_of_undying", + "type": "item", + "name": "minecraft:totem_of_undying", + "weight": 10 + }, + { + "entryName": "experience_bottle", + "type": "item", + "name": "minecraft:experience_bottle", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "emerald", + "type": "item", + "name": "minecraft:emerald", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "end_crystal", + "type": "item", + "name": "minecraft:end_crystal", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "chorus_fruit_popped", + "type": "item", + "name": "minecraft:chorus_fruit_popped", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "skeleton_head", + "type": "item", + "name": "minecraft:skull", + "weight": 5, + "functions": [ + { + "function": "set_data", + "data": 0 + } + ] + }, + { + "entryName": "zombie_head", + "type": "item", + "name": "minecraft:skull", + "weight": 5, + "functions": [ + { + "function": "set_data", + "data": 2 + } + ] + }, + { + "entryName": "creeper_head", + "type": "item", + "name": "minecraft:skull", + "weight": 5, + "functions": [ + { + "function": "set_data", + "data": 4 + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/items/rare.json b/src/main/resources/loot_tables/treasure2/pools/items/rare.json new file mode 100644 index 000000000..a892a23d1 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/items/rare.json @@ -0,0 +1,236 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "rare_items", + "rolls": 1, + "entries": [ + { + "entryName": "tnt", + "type": "item", + "name": "minecraft:tnt", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ] + }, + { + "entryName": "blaze_powder", + "type": "item", + "name": "minecraft:blaze_powder", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "entryName": "magma_cream", + "type": "item", + "name": "minecraft:magma_cream", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "entryName": "clock", + "type": "item", + "name": "minecraft:clock", + "weight": 25 + }, + { + "entryName": "compass", + "type": "item", + "name": "minecraft:compass", + "weight": 25 + }, + { + "entryName": "diamond_block", + "type": "item", + "name": "minecraft:diamond_block", + "weight": 10 + }, + { + "entryName": "glowstone", + "type": "item", + "name": "minecraft:glowstone", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "ender_pearl", + "type": "item", + "name": "minecraft:ender_pearl", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "ender_eye", + "type": "item", + "name": "minecraft:ender_eye", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "blaze_rod", + "type": "item", + "name": "minecraft:blaze_rod", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "ghast_tear", + "type": "item", + "name": "minecraft:ghast_tear", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "experience_bottle", + "type": "item", + "name": "minecraft:experience_bottle", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "diamond", + "type": "item", + "name": "minecraft:diamond", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "prismarine_crystals", + "type": "item", + "name": "minecraft:prismarine_crystals", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "prismarine_shard", + "type": "item", + "name": "minecraft:prismarine_shard", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "sea_lantern", + "type": "item", + "name": "minecraft:sea_lantern", + "weight": 20 + }, + { + "entryName": "nether_star", + "type": "item", + "name": "minecraft:nether_star", + "weight": 15 + }, + { + "entryName": "firework_charge", + "type": "item", + "name": "minecraft:firework_charge", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/items/scarce.json b/src/main/resources/loot_tables/treasure2/pools/items/scarce.json new file mode 100644 index 000000000..d23b273d8 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/items/scarce.json @@ -0,0 +1,113 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "scarce_items", + "rolls": 1, + "entries": [ + { + "entryName": "arrow", + "type": "item", + "name": "minecraft:arrow", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 10, + "max": 20 + } + } + ] + }, + { + "entryName": "tnt", + "type": "item", + "name": "minecraft:tnt", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "blaze_powder", + "type": "item", + "name": "minecraft:blaze_powder", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "entryName": "diamond", + "type": "item", + "name": "minecraft:diamond", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "iron_ingot", + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 8, + "max": 12 + } + } + ] + }, + { + "entryName": "iron_block", + "type": "item", + "name": "minecraft:iron_block", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "ender_pearl", + "type": "item", + "name": "minecraft:ender_pearl", + "weight": 15 + }, + { + "entryName": "gunpowder", + "type": "item", + "name": "minecraft:gunpowder", + "weight": 20 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/items/uncommon.json b/src/main/resources/loot_tables/treasure2/pools/items/uncommon.json new file mode 100644 index 000000000..d0ebcdc79 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/items/uncommon.json @@ -0,0 +1,209 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "uncommon_items", + "rolls": 1, + "entries": [ + { + "entryName": "spectral_arrow", + "type": "item", + "name": "minecraft:spectral_arrow", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 6 + } + } + ] + }, + { + "entryName": "iron_ingot", + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "entryName": "paper", + "type": "item", + "name": "minecraft:paper", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "reeds", + "type": "item", + "name": "minecraft:reeds", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "book", + "type": "item", + "name": "minecraft:book", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "bowl", + "type": "item", + "name": "minecraft:bowl", + "weight": 30 + }, + { + "entryName": "redstone", + "type": "item", + "name": "minecraft:redstone", + "weight": 30, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "redstone_torch", + "type": "item", + "name": "minecraft:redstone_torch", + "weight": 40, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "coal", + "type": "item", + "name": "minecraft:coal", + "weight": 50, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "entryName": "bow", + "type": "item", + "name": "minecraft:bow", + "weight": 25 + }, + { + "entryName": "clay", + "type": "item", + "name": "minecraft:clay", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "bucket", + "type": "item", + "name": "minecraft:bucket", + "weight": 50 + }, + { + "entryName": "slime_ball", + "type": "item", + "name": "minecraft:slime_ball", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "lead", + "type": "item", + "name": "minecraft:lead", + "weight": 35, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "entryName": "fermented_spider_eye", + "type": "item", + "name": "minecraft:fermented_spider_eye", + "weight": 25, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/potions/common.json b/src/main/resources/loot_tables/treasure2/pools/potions/common.json new file mode 100644 index 000000000..0ec4c697f --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/potions/common.json @@ -0,0 +1,59 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "common_potions", + "rolls": 1, + "entries": [ + { + "entryName": "potion_c1", + "type": "item", + "name": "minecraft:potion", + "weight": 1, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:regeneration\"}" + } + ] + }, + { + "entryName": "potion_c2", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:night_vision\"}" + } + ] + }, + { + "entryName": "potion_c3", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:leaping\"}" + } + ] + }, + { + "entryName": "potion_c4", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:mundane\"}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/potions/epic.json b/src/main/resources/loot_tables/treasure2/pools/potions/epic.json new file mode 100644 index 000000000..8114939cb --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/potions/epic.json @@ -0,0 +1,83 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "epic_potions", + "rolls": 1, + "entries": [ + { + "entryName": "potion_e1", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"treasure2:extra_strong_healing\"}" + } + ] + }, + { + "entryName": "potion_e2", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"treasure2:extra_strong_strength\"}" + } + ] + }, + { + "entryName": "potion_e3", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"treasure2:extra_strong_leaping\"}" + } + ] + }, + { + "entryName": "potion_e4", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"treasure2:extra_strong_swiftness\"}" + } + ] + }, + { + "entryName": "potion_e5", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"treasure2:extra_strong_regeneration\"}" + } + ] + }, + { + "entryName": "potion_e6", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"treasure2:extra_strong_poison\"}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/potions/rare.json b/src/main/resources/loot_tables/treasure2/pools/potions/rare.json new file mode 100644 index 000000000..02f27476f --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/potions/rare.json @@ -0,0 +1,119 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "rare_potions", + "rolls": 1, + "entries": [ + { + "entryName": "potion_r1", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:long_swiftness\"}" + } + ] + }, + { + "entryName": "potion_r2", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:long_fire_resistance\"}" + } + ] + }, + { + "entryName": "potion_r3", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:long_strength\"}" + } + ] + }, + { + "entryName": "potion_r4", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:strong_healing\"}" + } + ] + }, + { + "entryName": "potion_r5", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:long_leaping\"}" + } + ] + }, + { + "entryName": "potion_r6", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:strong_harming\"}" + } + ] + }, + { + "entryName": "potion_r7", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:long_regeneration\"}" + } + ] + }, + { + "entryName": "potion_r8", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:luck\"}" + } + ] + }, + { + "entryName": "potion_r9", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:long_poison\"}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/potions/scarce.json b/src/main/resources/loot_tables/treasure2/pools/potions/scarce.json new file mode 100644 index 000000000..084f3b672 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/potions/scarce.json @@ -0,0 +1,107 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "scarce_potions", + "rolls": 1, + "entries": [ + { + "entryName": "potion_s1", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:long_night_vision\"}" + } + ] + }, + { + "entryName": "potion_s2", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:long_invisibility\"}" + } + ] + }, + { + "entryName": "potion_s3", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:strong_strength\"}" + } + ] + }, + { + "entryName": "potion_s4", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:long_weakness\"}" + } + ] + }, + { + "entryName": "potion_s5", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:strong_leaping\"}" + } + ] + }, + { + "entryName": "potion_s6", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:strong_swiftness\"}" + } + ] + }, + { + "entryName": "potion_s7", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:strong_regeneration\"}" + } + ] + }, + { + "entryName": "potion_s8", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:strong_poison\"}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/potions/uncommon.json b/src/main/resources/loot_tables/treasure2/pools/potions/uncommon.json new file mode 100644 index 000000000..cd82fb0be --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/potions/uncommon.json @@ -0,0 +1,71 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "uncommon_potions", + "rolls": 1, + "entries": [ + { + "entryName": "potion_uc1", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:invisibility\"}" + } + ] + }, + { + "entryName": "potion_uc2", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:strength\"}" + } + ] + }, + { + "entryName": "potion_uc3", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:weakness\"}" + } + ] + }, + { + "entryName": "potion_uc4", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:swiftness\"}" + } + ] + }, + { + "entryName": "potion_uc5", + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:water_breathing\"}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/tools/common.json b/src/main/resources/loot_tables/treasure2/pools/tools/common.json new file mode 100644 index 000000000..2ebb50a73 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/tools/common.json @@ -0,0 +1,47 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "common_tools", + "rolls": 1, + "entries": [ + { + "entryName": "stone_sword", + "type": "item", + "name": "minecraft:stone_sword", + "weight": 25 + }, + { + "entryName": "stone_pickaxe", + "type": "item", + "name": "minecraft:stone_pickaxe", + "weight": 25 + }, + { + "entryName": "stone_axe", + "type": "item", + "name": "minecraft:stone_axe", + "weight": 25 + }, + { + "entryName": "golden_sword", + "type": "item", + "name": "minecraft:golden_sword", + "weight": 15 + }, + { + "entryName": "golden_pickaxe", + "type": "item", + "name": "minecraft:golden_pickaxe", + "weight": 15 + }, + { + "entryName": "golden_axe", + "type": "item", + "name": "minecraft:golden_axe", + "weight": 15 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/tools/epic.json b/src/main/resources/loot_tables/treasure2/pools/tools/epic.json new file mode 100644 index 000000000..64b093512 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/tools/epic.json @@ -0,0 +1,48 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "epic_tools", + "rolls": 1, + "entries": [ + { + "entryName": "iron_sword", + "type": "item", + "name": "minecraft:iron_sword", + "weight": 35 , + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + }, + { + "function": "enchant_with_levels", + "levels": 20, + "treasure": true + }, + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "diamond_sword", + "type": "item", + "name": "minecraft:diamond_sword", + "weight": 50, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + }, + { + "function": "enchant_randomly" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/tools/rare.json b/src/main/resources/loot_tables/treasure2/pools/tools/rare.json new file mode 100644 index 000000000..73813fa52 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/tools/rare.json @@ -0,0 +1,61 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "rare_tools", + "rolls": 1, + "entries": [ + { + "entryName": "iron_sword", + "type": "item", + "name": "minecraft:iron_sword", + "weight": 35 , + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + }, + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "diamond_sword", + "type": "item", + "name": "minecraft:diamond_sword", + "weight": 50, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + + { + "entryName": "diamond_pickaxe", + "type": "item", + "name": "minecraft:diamond_pickaxe", + "weight": 50, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "diamond_axe", + "type": "item", + "name": "minecraft:diamond_axe", + "weight": 50, + "functions": [ + { + "function": "enchant_randomly" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/tools/scarce.json b/src/main/resources/loot_tables/treasure2/pools/tools/scarce.json new file mode 100644 index 000000000..49e170c47 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/tools/scarce.json @@ -0,0 +1,67 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "scarce_tools", + "rolls": 1, + "entries": [ + { + "entryName": "iron_sword", + "type": "item", + "name": "minecraft:iron_sword", + "weight": 25, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "bow", + "type": "item", + "name": "minecraft:bow", + "weight": 20, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "iron_pickaxe", + "type": "item", + "name": "minecraft:iron_pickaxe", + "weight": 13, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "iron_axe", + "type": "item", + "name": "minecraft:iron_axe", + "weight": 25, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "diamond_sword", + "type": "item", + "name": "minecraft:diamond_sword", + "weight": 10 + }, + { + "entryName": "diamond_pickaxe", + "type": "item", + "name": "minecraft:diamond_pickaxe", + "weight": 15 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/tools/uncommon.json b/src/main/resources/loot_tables/treasure2/pools/tools/uncommon.json new file mode 100644 index 000000000..140d93679 --- /dev/null +++ b/src/main/resources/loot_tables/treasure2/pools/tools/uncommon.json @@ -0,0 +1,62 @@ +{ + "version": "1.0", + "pools": [ + { + "name": "uncommon_tools", + "rolls": 1, + "entries": [ + { + "entryName": "iron_sword", + "type": "item", + "name": "minecraft:iron_sword", + "weight": 35 + }, + { + "entryName": "iron_pickaxe", + "type": "item", + "name": "minecraft:iron_pickaxe", + "weight": 25 + }, + { + "entryName": "iron_axe", + "type": "item", + "name": "minecraft:iron_axe", + "weight": 25 + }, + { + "entryName": "golden_sword", + "type": "item", + "name": "minecraft:golden_sword", + "weight": 25, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "golden_pickaxe", + "type": "item", + "name": "minecraft:golden_pickaxe", + "weight": 15, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "entryName": "golden_axe", + "type": "item", + "name": "minecraft:golden_axe", + "weight": 15, + "functions": [ + { + "function": "enchant_randomly" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/common.json b/src/main/resources/loot_tables/treasure2/pools/treasure/common.json index 5496b147b..c8dcd8865 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/common.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/common.json @@ -102,7 +102,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "lesser_healing", "durable_shielding" diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json index bf3c00033..ecaa468b2 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json @@ -42,7 +42,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "greater_healing", "hardened_shielding", @@ -52,7 +52,7 @@ ] }, { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "greater_healing", "hardened_shielding", @@ -76,7 +76,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "greater_healing", "hardened_shielding", @@ -87,7 +87,7 @@ ] }, { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "grand_healing", "powerful_shielding", diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json index f93ffde6a..26c01831c 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json @@ -18,7 +18,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "greater_healing", "hardened_shielding", @@ -28,7 +28,7 @@ ] }, { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "greater_healing", "hardened_shielding", @@ -53,7 +53,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "grand_healing", "powerful_shielding", diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json index 0905e73d5..993e063e4 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json @@ -18,7 +18,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "lesser_healing", "durable_shielding", @@ -42,7 +42,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "lesser_healing", "durable_shielding", @@ -52,7 +52,7 @@ ] }, { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "healing", "stout_shielding", @@ -76,7 +76,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "greater_healing", "hardened_shielding", diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json index 096f9e5a8..db7ad79a6 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json @@ -18,7 +18,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "lesser_healing", "durable_shielding" @@ -39,7 +39,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "lesser_healing", "durable_shielding", @@ -62,7 +62,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly", + "function": "treasure2:charm_randomly2", "charms": [ "healing", "stout_shielding" From 08fd4b6a894be73dac92aea33070f2734bf09aa8 Mon Sep 17 00:00:00 2001 From: gottsch Date: Sat, 5 Dec 2020 14:40:55 +0000 Subject: [PATCH 08/20] initial commit --- .../treasure2/eventhandler/PlayerEventHandler.java | 5 ++++- .../treasure2/item/charm/HarvestingCharm.java | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java index 4ed7ec67a..300244564 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java @@ -196,7 +196,10 @@ public void checkCharmsInteractionWithBlock(BlockEvent.HarvestDropsEvent event) if (event.getHarvester() == null) { return; } - + + // TODO check to see if the block being harvested is in the event. if so, then check what the block is + // if it implements IInventory or ITileEntity provider or any sort of container then don't process + // get the player EntityPlayerMP player = (EntityPlayerMP) event.getHarvester(); processCharms(event, player); diff --git a/src/main/java/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java index a9428277c..9b28e3d5c 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java @@ -47,6 +47,7 @@ public boolean doCharm(World world, Random random, ICoords coords, EntityPlayer public boolean doCharm(World world, Random random, ICoords coords, EntityPlayer player, BlockEvent.HarvestDropsEvent event, final ICharmVitals vitals) { boolean result = false; if (vitals.getValue() > 0 && !player.isDead) { + // TODO exclude all Charms, Chests, ie any Treasure items // process all the drops for (ItemStack stack : event.getDrops()) { Treasure.logger.debug("current stack size is -> {}", stack.getCount()); From f78a5c3f97aa0428fa1c2b850d663fde8703eebf Mon Sep 17 00:00:00 2001 From: gottsch Date: Sat, 5 Dec 2020 09:56:44 -0500 Subject: [PATCH 09/20] debug --- .../treasure2/generator/chest/IChestGenerator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java index 26c47adca..23aa3ca29 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java @@ -225,11 +225,14 @@ default public void fillChest(final World world, Random random, final TileEntity // fetch all injected loot tables by Optional> injectLootTableShells = buildInjectedLootTableList(lootTableShell.get().getCategory(), rarity); if (injectLootTableShells.isPresent()) { + logger.debug("found injectable tables for category ->{}, rarity -> {}", lootTableShell.get().getCategory(), rarity); for (LootTableShell injectLootTableShell : injectLootTableShells.get()) { + logger.debug("injectable resource -> {}", injectLootTableShell.getResourceLocation()); // get the vanilla managed loot table net.minecraft.world.storage.loot.LootTable injectLootTable = world.getLootTableManager().getLootTableFromLocation(injectLootTableShell.getResourceLocation()); // add loot from tables to itemStacks itemStacks.addAll(injectLootTable.generateLootForPools(random, lootContext)); + logger.debug("size of item stacks after inject -> {}", itemStacks.size()); } } From bf4743892b64e6a995dc902877458cdb1956afba Mon Sep 17 00:00:00 2001 From: gottsch Date: Sat, 5 Dec 2020 12:56:06 -0500 Subject: [PATCH 10/20] fixed harvesting charm duplication bug --- .../someguyssoftware/treasure2/Treasure.java | 2 +- .../eventhandler/PlayerEventHandler.java | 15 +++++++++---- .../treasure2/item/charm/CharmType.java | 2 +- .../treasure2/item/charm/HarvestingCharm.java | 21 +++++++++++++++++-- .../treasure2/treasure/epic_charms.json | 14 ++++++------- src/main/resources/mcmod.info | 2 +- update.json | 7 ++++--- 7 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/someguyssoftware/treasure2/Treasure.java b/src/main/java/com/someguyssoftware/treasure2/Treasure.java index 6aef05bff..d30b78aac 100644 --- a/src/main/java/com/someguyssoftware/treasure2/Treasure.java +++ b/src/main/java/com/someguyssoftware/treasure2/Treasure.java @@ -105,7 +105,7 @@ public class Treasure extends AbstractMod { // constants public static final String MODID = "treasure2"; protected static final String NAME = "Treasure2"; - protected static final String VERSION = "1.13.1"; + protected static final String VERSION = "1.13.2"; public static final String UPDATE_JSON_URL = "https://raw.githubusercontent.com/gottsch/gottsch-minecraft-Treasure/master/update.json"; diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java index 300244564..ba9106a38 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java @@ -28,11 +28,13 @@ import com.someguyssoftware.treasure2.network.CharmMessageToClient; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.MobEffects; +import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -196,10 +198,15 @@ public void checkCharmsInteractionWithBlock(BlockEvent.HarvestDropsEvent event) if (event.getHarvester() == null) { return; } - - // TODO check to see if the block being harvested is in the event. if so, then check what the block is - // if it implements IInventory or ITileEntity provider or any sort of container then don't process - + + // if the harvested blcok has a tile entity then don't process + // NOTE this may exclude non-inventory blocks + IBlockState harvestedState = event.getState(); + Block harvestedBlock = harvestedState.getBlock(); + if (harvestedBlock.hasTileEntity(harvestedState)) { + return; + } + // get the player EntityPlayerMP player = (EntityPlayerMP) event.getHarvester(); processCharms(event, player); diff --git a/src/main/java/com/someguyssoftware/treasure2/item/charm/CharmType.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/CharmType.java index a400a3c0a..d87964bb5 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/charm/CharmType.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/charm/CharmType.java @@ -11,7 +11,7 @@ public enum CharmType { HEALING("healing", new double[] {20, 50, 100, 200}), SHIELDING("shielding", new double[] {20, 50, 100, 200}, new double[] {0.5, 0.6, 0.7, 0.8}), FULLNESS("fullness", new double[] {20, 50, 100, 200}), - HARVESTING("harvesting", new double[] {20, 30, 40, 50}, new double[] {2, 3, 4, 5}), // values here indicate number of harvestable blocks + HARVESTING("harvesting", new double[] {20, 30, 40, 50}, new double[] {2, 3, 4, 5}), // values here indicate number of harvestable blocks ILLUMINATION("illumination", new double[] {3, 6, 12, 20}), DECAY("decay", new double[] {20, 50, 100, 200}); diff --git a/src/main/java/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java b/src/main/java/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java index 9b28e3d5c..81d16f26b 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/charm/HarvestingCharm.java @@ -7,8 +7,11 @@ import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.treasure2.Treasure; +import com.someguyssoftware.treasure2.item.IPouch; +import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.event.entity.living.LivingDamageEvent; @@ -46,10 +49,24 @@ public boolean doCharm(World world, Random random, ICoords coords, EntityPlayer @Override public boolean doCharm(World world, Random random, ICoords coords, EntityPlayer player, BlockEvent.HarvestDropsEvent event, final ICharmVitals vitals) { boolean result = false; - if (vitals.getValue() > 0 && !player.isDead) { - // TODO exclude all Charms, Chests, ie any Treasure items + if (vitals.getValue() > 0 && !player.isDead) { // process all the drops for (ItemStack stack : event.getDrops()) { + + // exclude all Charms, Pouches or Blocks with Tile Entities + Block block = Block.getBlockFromItem(stack.getItem()); + if (block != Blocks.AIR) { + if (block.hasTileEntity(block.getDefaultState())) { + Treasure.logger.debug("skipped item because it has a tile entity."); + continue; + } + } else { + if (stack.getItem() instanceof ICharmed || stack.getItem() instanceof IPouch) { + Treasure.logger.debug("skipped item because it is a charm or pouch."); + continue; + } + } + Treasure.logger.debug("current stack size is -> {}", stack.getCount()); int size = (int)(stack.getCount() * vitals.getPercent()); stack.setCount(size); diff --git a/src/main/resources/loot_tables/treasure2/treasure/epic_charms.json b/src/main/resources/loot_tables/treasure2/treasure/epic_charms.json index bf3c00033..1fc5d8918 100644 --- a/src/main/resources/loot_tables/treasure2/treasure/epic_charms.json +++ b/src/main/resources/loot_tables/treasure2/treasure/epic_charms.json @@ -1,5 +1,5 @@ { - "version": "1.0", + "version": "1.1", "pools": [ { "name": "epic_charms", @@ -13,19 +13,19 @@ "conditions": [ { "condition": "random_chance", - "chance": 0.10 + "chance": 0.08 } ] }, { "entryName": "miners_friend", "type": "item", - "name": "treasure2:minders_friend", + "name": "treasure2:miners_friend", "weight": 10, "conditions": [ { "condition": "random_chance", - "chance": 0.15 + "chance": 0.12 } ] }, @@ -37,7 +37,7 @@ "conditions": [ { "condition": "random_chance", - "chance": 0.25 + "chance": 0.20 } ], "functions": [ @@ -71,7 +71,7 @@ "conditions": [ { "condition": "random_chance", - "chance": 0.2 + "chance": 0.18 } ], "functions": [ @@ -106,7 +106,7 @@ "conditions": [ { "condition": "random_chance", - "chance": 0.15 + "chance": 0.12 } ] } diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 785198637..5c031df4f 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "treasure2", "name": "Treasure2!", "description": "", - "version": "1.13.1", + "version": "1.13.2", "mcversion": "1.12.2", "url": "", "updateUrl": "", diff --git a/update.json b/update.json index 4dd31cd87..b6662fa99 100644 --- a/update.json +++ b/update.json @@ -1,8 +1,8 @@ { "homepage": "https://minecraft.curseforge.com/projects/treasure2", "promos": { - "1.12.2-latest": "1.13.1", - "1.12.2-recommended": "1.13.1" + "1.12.2-latest": "1.13.2", + "1.12.2-recommended": "1.13.2" }, "1.12.2": { "0.5.0": "alpha release", @@ -41,6 +41,7 @@ "1.12.0": "Added Charms system.\nAdded Pouches (Coin Pouch, Lucky Pouch, Apprentice's Pouch, Master's Pouch).\nAdded versions to all loot table files - if new versions made, old version will be backed up as .bak files.\nAdded Charms to loot tables.\nAdded relative positioning for t2-chest command.\nConvert KeyRing to use Capabilities.BACKUP your world, you will lose KeyRing items on update!\nUsing GottschCore v1.13.0.\n", "1.12.1": "Fixed doubling of coins in Pouches bug (https://github.com/gottsch/gottsch-minecraft-Treasure/issues/142).\nAdded default values for MobProximitySpawners to prevent crashes (https://github.com/gottsch/gottsch-minecraft-Treasure/issues/152).\nAdded default charm assignments if loot table incorreclty configured (https://github.com/gottsch/gottsch-minecraft-Treasure/issues/146).", "1.13.0": "Added Ember Lock and Key.\nAdded Leaf Lock and Key.\nAdded Lightning Key.\nAdded ability to merge Keys on anvil.\nAdded Volcano Pit.\nAdded Blackstone Block (from mc1.16).\nIncreased Key success rate to 95%.\nIncreased Pilferer's Lock Pick success rate to 32%.\nIncreased Thief's Lock Pick success rate to 48%.\nUpdated loot tables to include Ember, Leaf and Lightning Keys.\nUpdated Chinese lang file.\n", - "1.13.1": "Fixed the large number of TileEntities created because of Gravestones. (Note, this is only for newly generated chunks).\nReduced likihood of Bound Soul gravestone to 30%.\nFixed the versioning.\n" + "1.13.1": "Fixed the large number of TileEntities created because of Gravestones. (Note, this is only for newly generated chunks).\nReduced likihood of Bound Soul gravestone to 30%.\nFixed the versioning.\n", + "1.13.2": "Fixed duplication bug on Harvesting Charms.\nFixed some loot tables with item spelling errors.Tweaked the epic charmed loot table.\n" } } From d75b45227c354848f0c1e5bd5bfe178d3f56a51e Mon Sep 17 00:00:00 2001 From: gottsch Date: Mon, 7 Dec 2020 22:13:36 -0500 Subject: [PATCH 11/20] transition to new loot management system --- gradle.properties | 2 +- .../someguyssoftware/treasure2/Treasure.java | 12 +- .../treasure2/client/gui/GuiHandler.java | 17 +- .../treasure2/command/SpawnChestCommand.java | 51 +++-- .../treasure2/entity/monster/MimicEntity.java | 2 +- .../eventhandler/PlayerEventHandler.java | 21 ++ .../eventhandler/ServerEventHandler.java | 5 +- .../eventhandler/WorldEventHandler.java | 21 +- .../chest/CauldronChestGenerator.java | 10 +- .../generator/chest/CommonChestGenerator.java | 9 +- .../chest/GoldSkullChestGenerator.java | 20 +- .../generator/chest/IChestGenerator.java | 211 +++++++++++------- .../generator/chest/RareChestGenerator.java | 32 ++- .../generator/chest/ScarceChestGenerator.java | 36 +-- .../generator/chest/SkullChestGenerator.java | 20 +- .../chest/UncommonChestGenerator.java | 38 ++-- .../generator/chest/WitherChestGenerator.java | 27 ++- .../treasure2/item/CoinItem.java | 73 ++++-- .../treasure2/item/PearlItem.java | 135 ++++++++--- .../treasure2/item/wish/IWishable.java | 57 ++++- .../treasure2/loot/LootTableMaster2.java | 46 +++- .../treasure2/loot/LootTableShell.java | 12 +- .../loot/TreasureLootTableMaster2.java | 47 +++- .../persistence/GenDataPersistence.java | 8 +- .../AbstractTreasureChestTileEntity.java | 30 ++- .../worldgen/SurfaceChestWorldGenerator.java | 2 +- .../assets/treasure2/lang/en_US.lang | 2 +- .../chests/common/armor_tool_chest.json | 9 +- .../chests/common/food_potion_chest.json | 9 +- .../chests/common/general_chest.json | 3 +- .../treasure2/chests/epic/general_chest.json | 23 +- .../chests/rare/armor_tool_chest.json | 43 ++-- .../chests/rare/food_potion_chest.json | 31 +-- .../treasure2/chests/rare/general_chest.json | 49 ++-- .../chests/scarce/armor_tool_chest.json | 43 ++-- .../chests/scarce/food_potion_chest.json | 33 +-- .../chests/scarce/general_chest.json | 49 ++-- .../chests/special/black_pearl_well.json | 32 +-- .../chests/special/cauldron_chest.json | 34 +-- .../chests/special/gold_skull_chest.json | 16 +- .../treasure2/chests/special/skull_chest.json | 8 +- .../chests/special/white_pearl_well.json | 28 +-- .../chests/special/wither_chest.json | 24 +- .../chests/uncommon/armor_tool_chest.json | 23 +- .../chests/uncommon/food_potion_chest.json | 17 +- .../chests/uncommon/general_chest.json | 25 ++- .../treasure2/pools/items/common.json | 75 +++++-- .../treasure2/pools/treasure/epic_charms.json | 12 +- src/main/resources/mcmod.info | 2 +- 49 files changed, 1009 insertions(+), 525 deletions(-) diff --git a/gradle.properties b/gradle.properties index 0a760bc0a..30e0bb361 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ package_group=someguyssoftware.treasure2 # user alpha, beta, or v (for version) mod_version_type=v -mod_version=1.13.2 +mod_version=1.14.0 #versions mc_version=1.12.2 diff --git a/src/main/java/com/someguyssoftware/treasure2/Treasure.java b/src/main/java/com/someguyssoftware/treasure2/Treasure.java index 98a5d5bae..8bf33bc11 100644 --- a/src/main/java/com/someguyssoftware/treasure2/Treasure.java +++ b/src/main/java/com/someguyssoftware/treasure2/Treasure.java @@ -10,6 +10,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.Appender; +import org.apache.logging.log4j.core.config.AppenderRef; import com.someguyssoftware.gottschcore.GottschCore; import com.someguyssoftware.gottschcore.annotation.Credits; @@ -109,7 +110,7 @@ public class Treasure extends AbstractMod { // constants public static final String MODID = "treasure2"; protected static final String NAME = "Treasure2"; - protected static final String VERSION = "1.13.1"; + protected static final String VERSION = "1.14.0"; public static final String UPDATE_JSON_URL = "https://raw.githubusercontent.com/gottsch/gottsch-minecraft-Treasure/master/update.json"; @@ -127,7 +128,7 @@ public class Treasure extends AbstractMod { // NOTE can't make final here as it is set during world load // loot tables management - public static TreasureLootTableMaster LOOT_TABLES; +// public static TreasureLootTableMaster LOOT_TABLES; public static TreasureLootTableMaster2 LOOT_TABLE_MASTER; @@ -191,6 +192,11 @@ public void preInt(FMLPreInitializationEvent event) { // add appender to the GottschCore logger addAppenderToLogger(appender, GottschCore.instance.getName(), (ILoggerConfig) getConfig()); + // TEST /////// + AppenderRef appenderReference = AppenderRef.createAppenderRef(appender.getName(), null, null); + Treasure.logger.debug("appender -> {}, appenderRef.ref -> {}", appender.getName(), appenderReference.getRef()); + // END OF TEST ////// + // register the GUI handler NetworkRegistry.INSTANCE.registerGuiHandler(this, new GuiHandler()); @@ -269,7 +275,7 @@ public void init(FMLInitializationEvent event) { } // add the loot table managers - LOOT_TABLES = new TreasureLootTableMaster(Treasure.instance, "", "loot_tables"); +// LOOT_TABLES = new TreasureLootTableMaster(Treasure.instance, "", "loot_tables"); LOOT_TABLE_MASTER = new TreasureLootTableMaster2(Treasure.instance); TEMPLATE_MANAGER = new TreasureTemplateManager(Treasure.instance, "/structures", diff --git a/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java b/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java index aebe7e07c..6ecf1a097 100644 --- a/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/client/gui/GuiHandler.java @@ -89,22 +89,7 @@ public Object getServerGuiElement(int ID, EntityPlayer player, World world, int // fill the chest with loot chestGenerator.fillChest(world, new Random(), tileEntity, chestTileEntity.getGenerationContext().getLootRarity(), player); - - // select a loot table -// LootTable lootTable = chestGenerator.selectLootTable(Random::new, chestTileEntity.getGenerationContext().getLootRarity()); -// if (lootTable == null) { -// logger.warn("Unable to select a lootTable."); -// return null; -// } -// logger.debug("Generating loot from loot table for rarity {}", chestTileEntity.getGenerationContext().getLootRarity()); -// LootContext lootContext = new LootContext.Builder((WorldServer) world, Treasure.LOOT_TABLES.getLootTableManager()) -// .withLuck(player.getLuck()) -// .withPlayer(player) -// .build(); -// if (lootContext == null) { -// lootContext = Treasure.LOOT_TABLES.getContext(); -// } -// lootTable.fillInventory((IInventory) tileEntity, new Random(), lootContext); + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java index 279bfbb4a..ac57aab62 100644 --- a/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java +++ b/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java @@ -3,9 +3,13 @@ */ package com.someguyssoftware.treasure2.command; +import static com.someguyssoftware.treasure2.Treasure.logger; + +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.Random; import javax.annotation.Nullable; @@ -15,22 +19,26 @@ import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.Options; -import com.someguyssoftware.gottschcore.loot.LootTable; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.enums.WorldGeneratorType; import com.someguyssoftware.treasure2.generator.chest.IChestGenerator; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; import com.someguyssoftware.treasure2.worldgen.SurfaceChestWorldGenerator; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTable; /** * @@ -154,25 +162,32 @@ public void execute(MinecraftServer server, ICommandSender commandSender, String world.setBlockState(pos, chest.getDefaultState()); AbstractTreasureChestTileEntity tileEntity = (AbstractTreasureChestTileEntity) world.getTileEntity(pos); + // TODO no - need to select the loot table, set the resource location and sealed props in the tileentity + Optional lootTableShell = gen.selectLootTable2(random, rarity); + ResourceLocation lootTableResourceLocation = null; + if (lootTableShell.isPresent()) { + lootTableResourceLocation = lootTableShell.get().getResourceLocation(); + } + else { + Treasure.logger.debug("Unable to select a LootTable for rarity -> {}", rarity); + return; + } + if (lootTableResourceLocation == null) { + Treasure.logger.debug("Unable to select a LootTable for rarity -> {}", rarity); + return; + } + if (tileEntity != null) { - - // get the loot table - LootTable lootTable = gen.selectLootTable(Random::new, rarity); - - if (lootTable == null) { - Treasure.logger.warn("Unable to select a lootTable for rarity -> {}", rarity); - } - - Treasure.logger.debug("Generating loot from loot table for rarity {}", rarity); - List stacks = lootTable.generateLootFromPools(new Random(), - Treasure.LOOT_TABLES.getContext()); - Treasure.logger.debug("Generated loot:"); - for (ItemStack stack : stacks) { - Treasure.logger.debug(stack.getDisplayName()); - } - - lootTable.fillInventory((IInventory) tileEntity, new Random(), Treasure.LOOT_TABLES.getContext()); + // add the loot table + gen.addLootTable((AbstractTreasureChestTileEntity) tileEntity, lootTableResourceLocation); + + // seal the chest + gen.addSeal((AbstractTreasureChestTileEntity) tileEntity); + + // update the backing tile entity's generation contxt + gen.addGenerationContext((AbstractTreasureChestTileEntity) tileEntity, rarity); } + } catch (Exception e) { Treasure.logger.error("Error generating Treasure! chest: ", e); } diff --git a/src/main/java/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java b/src/main/java/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java index 5a2835900..d01068db9 100644 --- a/src/main/java/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java +++ b/src/main/java/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java @@ -159,7 +159,7 @@ protected ResourceLocation selectLootTableResourceLocation(Random random, final ResourceLocation location = null; // select the loot table by rarity - List locations = Treasure.LOOT_TABLES.getLootTableResourceByRarity(chestRarity); + List locations = Treasure.LOOT_TABLE_MASTER.getLootTableResourceByRarity(chestRarity); // select a random location from the list if (locations != null && !locations.isEmpty()) { diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java index 4ed7ec67a..cf73c936c 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/PlayerEventHandler.java @@ -25,6 +25,7 @@ import com.someguyssoftware.treasure2.item.charm.ICharm; import com.someguyssoftware.treasure2.item.charm.ICharmState; import com.someguyssoftware.treasure2.item.charm.ICharmed; +import com.someguyssoftware.treasure2.item.wish.IWishable; import com.someguyssoftware.treasure2.network.CharmMessageToClient; import net.minecraft.block.Block; @@ -41,6 +42,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.entity.living.LivingDamageEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.world.BlockEvent; @@ -292,6 +294,25 @@ else if (mainHeldStack.getItem() instanceof IPouch && ((IPouch)mainHeldStack.get return Optional.of(context); } + /** + * + * @param event + */ + @SubscribeEvent + public void onTossCoinEvent(ItemTossEvent event) { + if (WorldInfo.isClientSide(event.getPlayer().world)) { + return; + } + + Item item = event.getEntityItem().getItem().getItem(); + if (item instanceof IWishable) { + ItemStack stack = event.getEntityItem().getItem(); + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString(IWishable.DROPPED_BY_KEY, event.getPlayer().getName()); + stack.setTagCompound(nbt); + } + } + /** * @return the mod */ diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java index 448cdd846..b95f27fff 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java @@ -26,10 +26,11 @@ public ServerEventHandler(IMod mod) { } @SubscribeEvent - public void checkFogInteraction(FMLServerStoppingEvent event) { + public void onServerStopping(FMLServerStoppingEvent event) { Treasure.logger.debug("Closing out of world."); // clear all resource managers - Treasure.LOOT_TABLES.clear(); + Treasure.LOOT_TABLE_MASTER.clear(); +// Treasure.LOOT_TABLES.clear(); Treasure.TEMPLATE_MANAGER.clear(); Treasure.META_MANAGER.clear(); } diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java index 2952dd7c1..6a6f1830b 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java @@ -51,11 +51,9 @@ public void onWorldLoad(WorldEvent.Load event) { /* * On load of dimension 0 (overworld), initialize the loot table's context and other static loot tables */ - // TODO revisit this!!!! 1) not obeying multi-dimension rules 2) what if they saved off in a different dimension ? if (WorldInfo.isServerSide(event.getWorld()) && event.getWorld().provider.getDimension() == 0) { // Treasure.logger.debug("server event"); WorldServer world = (WorldServer) event.getWorld(); -// TreasureLootTables.init(world); /////////////////////////// /// New Loot Table Master @@ -64,26 +62,9 @@ public void onWorldLoad(WorldEvent.Load event) { Treasure.LOOT_TABLE_MASTER.init(world); // register mod's loot tables with the LootTableMaster Treasure.LOOT_TABLE_MASTER.register(mod.getId()); - - // TEST /// -// ResourceLocation loc = new ResourceLocation("treasure2", "test/one"); -// Optional lootTableShell = Treasure.LOOT_TABLE_MASTER.loadLootTable(Treasure.LOOT_TABLE_MASTER.getWorldDataBaseFolder(), loc); -// if (lootTableShell.isPresent()) { -// Treasure.logger.debug("Found world data loot table with version -> {}, # of pools -> {}", lootTableShell.get().getVersion(), lootTableShell.get().getPools().size()); -// // register it with MC -// ResourceLocation newLoc = LootTableList.register(loc); -// Treasure.logger.debug("registered world data loot table -> {}", newLoc); -// LootTable table = world.getLootTableManager().getLootTableFromLocation(newLoc); -// Treasure.logger.debug("got the loot table -> {}", table); -// } -// else { -// Treasure.logger.debug("Couldn't find world data loot table -> {}", loc); -// } - // END TEST /// - /////////////////////////// // TODO deprecated calls - Treasure.LOOT_TABLES.init(world); +// Treasure.LOOT_TABLES.init(world); // Treasure.LOOT_TABLES.register(getMod().getId()); // TODO deprecated system diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java index 671f41762..095f89496 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java @@ -3,6 +3,7 @@ */ package com.someguyssoftware.treasure2.generator.chest; +import java.util.Optional; import java.util.Random; import java.util.function.Supplier; @@ -12,6 +13,7 @@ import com.someguyssoftware.treasure2.block.TreasureChestBlock; import com.someguyssoftware.treasure2.enums.ChestGeneratorType; import com.someguyssoftware.treasure2.enums.Rarity; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; @@ -42,13 +44,13 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar * @return */ @Override - public LootTable selectLootTable(Random random, final Rarity chestRarity) { - return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.CAULDRON_CHEST); + public Optional selectLootTable2(Random random, final Rarity chestRarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.CAULDRON_CHEST)); } @Override - public LootTable selectLootTable(Supplier factory, final Rarity rarity) { - return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.CAULDRON_CHEST); + public Optional selectLootTable2(Supplier factory, final Rarity rarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.CAULDRON_CHEST)); } /** diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java index 49eefc500..4ec08b9aa 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java @@ -14,6 +14,7 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; /** @@ -44,11 +45,11 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar * @return */ @Override - public List buildLootTableList(final Rarity chestRarity) { + public List buildLootTableList2(final Rarity chestRarity) { // get all loot tables by column key - List tables = new ArrayList<>(); - tables.addAll(Treasure.LOOT_TABLES.getLootTableByRarity(Rarity.COMMON)); - tables.addAll(Treasure.LOOT_TABLES.getLootTableByRarity(Rarity.UNCOMMON)); + List tables = new ArrayList<>(); + tables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.COMMON)); + tables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.UNCOMMON)); return tables; } diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java index 1f7d004cc..28adcecd9 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.Random; import java.util.function.Supplier; @@ -19,6 +20,7 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; @@ -49,14 +51,24 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar * @param chestRarity * @return */ +// @Override +// public LootTable selectLootTable(Random random, final Rarity chestRarity) { +// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.GOLD_SKULL_CHEST); +// } +// +// @Override +// public LootTable selectLootTable(Supplier factory, final Rarity rarity) { +// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.GOLD_SKULL_CHEST); +// } + @Override - public LootTable selectLootTable(Random random, final Rarity chestRarity) { - return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.GOLD_SKULL_CHEST); + public Optional selectLootTable2(Random random, final Rarity chestRarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.GOLD_SKULL_CHEST)); } @Override - public LootTable selectLootTable(Supplier factory, final Rarity rarity) { - return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.GOLD_SKULL_CHEST); + public Optional selectLootTable2(Supplier factory, final Rarity rarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.GOLD_SKULL_CHEST)); } /** diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java index 23aa3ca29..912566a7c 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java @@ -3,6 +3,8 @@ */ package com.someguyssoftware.treasure2.generator.chest; +import static com.someguyssoftware.treasure2.Treasure.logger; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -12,16 +14,11 @@ import java.util.stream.Collectors; import com.google.common.collect.Lists; -import com.someguyssoftware.gottschcore.loot.LootTable; import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.gottschcore.world.gen.structure.BlockContext; - -import static com.someguyssoftware.treasure2.Treasure.logger; - import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; -import com.someguyssoftware.treasure2.block.IMimicBlock; import com.someguyssoftware.treasure2.block.TreasureBlocks; import com.someguyssoftware.treasure2.chest.TreasureChestType; import com.someguyssoftware.treasure2.config.IChestConfig; @@ -39,7 +36,6 @@ import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; -import com.someguyssoftware.treasure2.tileentity.ITreasureChestTileEntity; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -48,11 +44,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StringUtils; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraft.world.storage.loot.LootContext; import net.minecraft.world.storage.loot.LootPool; -import net.minecraft.world.storage.loot.LootTableList; +import net.minecraft.world.storage.loot.LootTable; /** * @author Mark Gottschling on Dec 4, 2019 @@ -70,11 +67,20 @@ default public GeneratorResult generate(final World world, f // logger.warn("Unable to select a lootTable."); // return result.fail(); // } - + Optional lootTableShell = selectLootTable2(random, rarity); + ResourceLocation lootTableResourceLocation = null; + if (lootTableShell.isPresent()) { + lootTableResourceLocation = lootTableShell.get().getResourceLocation(); + } + else { + logger.debug("Unable to select a LootTable for rarity -> {}", rarity); + return result.fail(); + } + // select a chest from the rarity AbstractChestBlock chest = selectChest(random, rarity); if (chest == null) { - logger.warn("Unable to select a chest for rarity {}.", rarity); + logger.warn("Unable to select a chest for rarity -> {}.", rarity); return result.fail(); } @@ -91,6 +97,9 @@ default public GeneratorResult generate(final World world, f return result.fail(); } + // add the loot table + addLootTable((AbstractTreasureChestTileEntity) tileEntity, lootTableResourceLocation); + // seal the chest addSeal((AbstractTreasureChestTileEntity) tileEntity); @@ -116,13 +125,12 @@ default public GeneratorResult generate(final World world, f * @param rarity * @return */ - default public List buildLootTableList(Rarity rarity) { - return Treasure.LOOT_TABLES.getLootTableByRarity(rarity); - } +// default public List buildLootTableList(Rarity rarity) { +// return Treasure.LOOT_TABLES.getLootTableByRarity(rarity); +// } // TODO this should be a generic call that passes in ManagedTableType default public List buildLootTableList2(Rarity rarity) { - Treasure.logger.debug("building loot table list (2) by rarity -> {}", rarity); return Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(TreasureLootTableMaster2.ManagedTableType.CHEST, rarity); } @@ -165,24 +173,37 @@ default public AbstractChestBlock selectChest(final Random random, final Rarity * @param lootRarity */ default public void fillChest(final World world, Random random, final TileEntity tileEntity, final Rarity rarity, EntityPlayer player) { - // select a loot table - Optional lootTableShell = selectLootTable2(world, random, rarity); - Treasure.logger.debug("optional loottableshell object -> {}", lootTableShell); - net.minecraft.world.storage.loot.LootTable lootTable = null; - + Optional lootTableShell = null; + ResourceLocation lootTableResourceLocation = ((AbstractTreasureChestTileEntity)tileEntity).getLootTable(); + Treasure.logger.debug("chest has loot table property of -> {}", lootTableResourceLocation); + + if (lootTableResourceLocation == null) { + lootTableShell = selectLootTable2(random, rarity); + } + else { + lootTableShell = Treasure.LOOT_TABLE_MASTER.getLootTableByResourceLocation(lootTableResourceLocation); + } + // is valid loot table shell if (lootTableShell.isPresent()) { - lootTable = world.getLootTableManager().getLootTableFromLocation(lootTableShell.get().getResourceLocation()); - Treasure.logger.debug("select loot table -> {} from resource -> {}", lootTable, lootTableShell.get().getResourceLocation()); + Treasure.logger.debug("using loot table shell -> {}, {}", lootTableShell.get().getCategory(), lootTableShell.get().getRarity()); + lootTableResourceLocation = lootTableShell.get().getResourceLocation(); } else { Treasure.logger.debug("Unable to select a LootTable for rarity -> {}", rarity); + return; } + Treasure.logger.debug("loot table resource -> {}", lootTableResourceLocation); + LootTable lootTable = world.getLootTableManager().getLootTableFromLocation(lootTableResourceLocation); if (lootTable == null) { logger.warn("Unable to select a lootTable."); return; - } - logger.debug("Generating loot from loot table for rarity {}", rarity); + } + Treasure.logger.debug("selected loot table -> {} from resource -> {}", lootTable, lootTableResourceLocation); + + // update rarity from lootTableShell + Rarity effectiveRarity = Treasure.LOOT_TABLE_MASTER.getEffectiveRarity(lootTableShell.get(), rarity); + logger.debug("Generating loot from loot table for effective rarity {}", effectiveRarity); // setup lists of items List treasureStacks = new ArrayList<>(); @@ -198,10 +219,16 @@ default public void fillChest(final World world, Random random, final TileEntity } // setup context - LootContext lootContext = new LootContext.Builder((WorldServer) world) + LootContext lootContext = null; + if (player == null) { + lootContext = Treasure.LOOT_TABLE_MASTER.getContext(); + } + else { + lootContext = new LootContext.Builder((WorldServer) world) .withLuck(player.getLuck()) .withPlayer(player) .build(); + } for (LootPoolShell pool : lootPoolShells) { logger.debug("processing pool -> {}", pool.getName()); @@ -222,18 +249,14 @@ default public void fillChest(final World world, Random random, final TileEntity // record original item size (max number of items to pull from final list) int lootItemSize = itemStacks.size(); - // fetch all injected loot tables by - Optional> injectLootTableShells = buildInjectedLootTableList(lootTableShell.get().getCategory(), rarity); + // TODO move to separate method + // fetch all injected loot tables by category/rarity + logger.debug("searching for injectable tables for category ->{}, rarity -> {}", lootTableShell.get().getCategory(), effectiveRarity); + Optional> injectLootTableShells = buildInjectedLootTableList(lootTableShell.get().getCategory(), effectiveRarity); if (injectLootTableShells.isPresent()) { - logger.debug("found injectable tables for category ->{}, rarity -> {}", lootTableShell.get().getCategory(), rarity); - for (LootTableShell injectLootTableShell : injectLootTableShells.get()) { - logger.debug("injectable resource -> {}", injectLootTableShell.getResourceLocation()); - // get the vanilla managed loot table - net.minecraft.world.storage.loot.LootTable injectLootTable = world.getLootTableManager().getLootTableFromLocation(injectLootTableShell.getResourceLocation()); - // add loot from tables to itemStacks - itemStacks.addAll(injectLootTable.generateLootForPools(random, lootContext)); - logger.debug("size of item stacks after inject -> {}", itemStacks.size()); - } + logger.debug("found injectable tables for category ->{}, rarity -> {}", lootTableShell.get().getCategory(), effectiveRarity); + logger.debug("size of injectable tables -> {}", injectLootTableShells.get().size()); + itemStacks.addAll(Treasure.LOOT_TABLE_MASTER.getInjectedLootItems(world, random, injectLootTableShells.get(), lootContext)); } // add the treasure items to the chest @@ -245,7 +268,7 @@ default public void fillChest(final World world, Random random, final TileEntity // fill the chest with items fillInventory((IInventory) tileEntity, random, itemStacks.stream().limit(lootItemSize).collect(Collectors.toList())); } - + /** * * @param inventory @@ -304,26 +327,26 @@ default public void shuffleItems(List stacks, int emptySlotsSize, Ran * @param rarity * @return */ - @Deprecated - default public LootTable selectLootTable(Random random, final Rarity rarity) { - LootTable table = null; - - // select the loot table by rarity - List tables = buildLootTableList(rarity); - - // select a random table from the list - if (tables != null && !tables.isEmpty()) { - int index = 0; - if (tables.size() == 1) { - table = tables.get(0); - } else { - index = RandomHelper.randomInt(random, 0, tables.size() - 1); - table = tables.get(index); - } - logger.debug("Selected loot table index --> {}", index); - } - return table; - } +// @Deprecated +// default public LootTable selectLootTable(Random random, final Rarity rarity) { +// LootTable table = null; +// +// // select the loot table by rarity +// List tables = buildLootTableList(rarity); +// +// // select a random table from the list +// if (tables != null && !tables.isEmpty()) { +// int index = 0; +// if (tables.size() == 1) { +// table = tables.get(0); +// } else { +// index = RandomHelper.randomInt(random, 0, tables.size() - 1); +// table = tables.get(index); +// } +// logger.debug("Selected loot table index --> {}", index); +// } +// return table; +// } /** * @@ -331,34 +354,61 @@ default public LootTable selectLootTable(Random random, final Rarity rarity) { * @param rarity * @return */ - @Deprecated - default public LootTable selectLootTable(Supplier factory, final Rarity rarity) { - LootTable table = null; +// @Deprecated +// default public LootTable selectLootTable(Supplier factory, final Rarity rarity) { +// LootTable table = null; +// +// // select the loot table by rarity +// List tables = buildLootTableList(rarity); +// +// // select a random table from the list +// if (tables != null && !tables.isEmpty()) { +// int index = 0; +// if (tables.size() == 1) { +// table = tables.get(0); +// } else { +// index = RandomHelper.randomInt(factory.get(), 0, tables.size() - 1); +// table = tables.get(index); +// } +// logger.debug("Selected loot table index --> {}", index); +// } +// return table; +// } + + /** + * + * @param random + * @param rarity + * @return + */ + default public Optional selectLootTable2(Random random, final Rarity rarity) { + LootTableShell lootTableShell = null; // select the loot table by rarity - List tables = buildLootTableList(rarity); - + List tables = buildLootTableList2(rarity); + if (tables !=null)logger.debug("tables size -> {}", tables.size()); + // select a random table from the list if (tables != null && !tables.isEmpty()) { int index = 0; if (tables.size() == 1) { - table = tables.get(0); + lootTableShell = tables.get(0); } else { - index = RandomHelper.randomInt(factory.get(), 0, tables.size() - 1); - table = tables.get(index); + index = RandomHelper.randomInt(random, 0, tables.size() - 1); + lootTableShell = tables.get(index); } - logger.debug("Selected loot table index --> {}", index); + logger.debug("Selected loot table shell index --> {}", index); } - return table; + return Optional.ofNullable(lootTableShell); } - /** - * - * @param factory - * @param rarity - * @return - */ - default public Optional selectLootTable2(World world, Random random, final Rarity rarity) { + /** + * + * @param factory + * @param rarity + * @return + */ + default public Optional selectLootTable2(Supplier factory, Rarity rarity) { LootTableShell lootTableShell = null; // select the loot table by rarity @@ -371,13 +421,13 @@ default public Optional selectLootTable2(World world, Random ran if (tables.size() == 1) { lootTableShell = tables.get(0); } else { - index = RandomHelper.randomInt(random, 0, tables.size() - 1); + index = RandomHelper.randomInt(factory.get(), 0, tables.size() - 1); lootTableShell = tables.get(index); } logger.debug("Selected loot table shell index --> {}", index); } - return Optional.ofNullable(lootTableShell); - } + return Optional.ofNullable(lootTableShell); + } /** * @@ -386,6 +436,15 @@ default public Optional selectLootTable2(World world, Random ran */ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rarity rarity); + /** + * + * @param tileEntity + * @param location + */ + default public void addLootTable(AbstractTreasureChestTileEntity tileEntity, ResourceLocation location) { + tileEntity.setLootTable(location); + } + /** * * @param tileEntity @@ -539,5 +598,5 @@ default public TileEntity placeInWorld(World world, Random random, ICoords chest return null; } return tileEntity; - } + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java index 865a66c6f..ed6921b46 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java @@ -18,6 +18,7 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; @@ -43,19 +44,28 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar tileEntity.setGenerationContext(generationContext); } +// @Override +// public List buildLootTableList(final Rarity chestRarity) { +// List tables = new ArrayList<>(); +// Map> mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.SCARCE); +// for(Entry> n : mapOfLootTables.entrySet()) { +// tables.addAll(n.getValue()); +// } +// mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.RARE); +// for(Entry> n : mapOfLootTables.entrySet()) { +// tables.addAll(n.getValue()); +// } +// return tables; +// } + @Override - public List buildLootTableList(final Rarity chestRarity) { - List tables = new ArrayList<>(); - Map> mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.SCARCE); - for(Entry> n : mapOfLootTables.entrySet()) { - tables.addAll(n.getValue()); - } - mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.RARE); - for(Entry> n : mapOfLootTables.entrySet()) { - tables.addAll(n.getValue()); - } + public List buildLootTableList2(final Rarity chestRarity) { + // get all loot tables by column key + List tables = new ArrayList<>(); + tables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.SCARCE)); + tables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.RARE)); return tables; - } + } /** * Rare will have at least one lock. diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java index 09fdaf51f..f724b588f 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java @@ -18,6 +18,7 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; @@ -46,22 +47,31 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar /** * */ +// @Override +// public List buildLootTableList(final Rarity chestRarity) { +// // get all loot tables by column key +// List tables = new ArrayList<>(); +// Map> mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.UNCOMMON); +// // convert to a single list +// for(Entry> n : mapOfLootTables.entrySet()) { +// tables.addAll(n.getValue()); +// } +// mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.SCARCE); +// // convert to a single list +// for(Entry> n : mapOfLootTables.entrySet()) { +// tables.addAll(n.getValue()); +// } +// return tables; +// } + @Override - public List buildLootTableList(final Rarity chestRarity) { + public List buildLootTableList2(final Rarity chestRarity) { // get all loot tables by column key - List tables = new ArrayList<>(); - Map> mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.UNCOMMON); - // convert to a single list - for(Entry> n : mapOfLootTables.entrySet()) { - tables.addAll(n.getValue()); - } - mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.SCARCE); - // convert to a single list - for(Entry> n : mapOfLootTables.entrySet()) { - tables.addAll(n.getValue()); - } + List tables = new ArrayList<>(); + tables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.UNCOMMON)); + tables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.SCARCE)); return tables; - } + } /** * Scarce will have at least one lock. diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java index 122059d69..5f18f0c57 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.Random; import java.util.function.Supplier; @@ -19,6 +20,7 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; @@ -49,14 +51,24 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar * @param chestRarity * @return */ +// @Override +// public LootTable selectLootTable(Random random, final Rarity chestRarity) { +// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.SKULL_CHEST); +// } +// +// @Override +// public LootTable selectLootTable(Supplier factory, final Rarity rarity) { +// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.SKULL_CHEST); +// } + @Override - public LootTable selectLootTable(Random random, final Rarity chestRarity) { - return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.SKULL_CHEST); + public Optional selectLootTable2(Random random, final Rarity chestRarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.SKULL_CHEST)); } @Override - public LootTable selectLootTable(Supplier factory, final Rarity rarity) { - return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.SKULL_CHEST); + public Optional selectLootTable2(Supplier factory, final Rarity rarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.SKULL_CHEST)); } /** diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java index 6ea24c3e7..aabd750b4 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java @@ -16,6 +16,7 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; @@ -43,23 +44,32 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar /** * */ +// @Override +// public List buildLootTableList(final Rarity chestRarity) { +// List tables = new ArrayList<>(); +// +// // get all loot tables by column key +// Map> mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.COMMON); +// // convert to a single list +// for(Entry> n : mapOfLootTables.entrySet()) { +// tables.addAll(n.getValue()); +// } +// +// mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.UNCOMMON); +// for(Entry> n : mapOfLootTables.entrySet()) { +// tables.addAll(n.getValue()); +// } +// return tables; +// } + @Override - public List buildLootTableList(final Rarity chestRarity) { - List tables = new ArrayList<>(); - + public List buildLootTableList2(final Rarity chestRarity) { // get all loot tables by column key - Map> mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.COMMON); - // convert to a single list - for(Entry> n : mapOfLootTables.entrySet()) { - tables.addAll(n.getValue()); - } - - mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.UNCOMMON); - for(Entry> n : mapOfLootTables.entrySet()) { - tables.addAll(n.getValue()); - } + List tables = new ArrayList<>(); + tables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.COMMON)); + tables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.UNCOMMON)); return tables; - } + } /** * @param chest diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java index 134b67b23..398b77fc3 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java @@ -4,10 +4,10 @@ package com.someguyssoftware.treasure2.generator.chest; import java.util.List; +import java.util.Optional; import java.util.Random; import java.util.function.Supplier; -import com.someguyssoftware.gottschcore.loot.LootTable; import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.treasure2.Treasure; @@ -21,9 +21,9 @@ import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; import com.someguyssoftware.treasure2.lock.LockState; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; -import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; import net.minecraft.block.state.IBlockState; import net.minecraft.tileentity.TileEntity; @@ -55,16 +55,25 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar * @param chestRarity * @return */ +// @Override +// public LootTable selectLootTable(Random random, final Rarity chestRarity) { +// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.WITHER_CHEST); +// } +// +// @Override +// public LootTable selectLootTable(Supplier factory, final Rarity rarity) { +// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.WITHER_CHEST); +// } + @Override - public LootTable selectLootTable(Random random, final Rarity chestRarity) { - return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.WITHER_CHEST); + public Optional selectLootTable2(Random random, final Rarity chestRarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.WITHER_CHEST)); } - + @Override - public LootTable selectLootTable(Supplier factory, final Rarity rarity) { - return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.WITHER_CHEST); - } - + public Optional selectLootTable2(Supplier factory, final Rarity rarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.WITHER_CHEST)); + } /** * Always select a wither chest. */ diff --git a/src/main/java/com/someguyssoftware/treasure2/item/CoinItem.java b/src/main/java/com/someguyssoftware/treasure2/item/CoinItem.java index 3c060062a..f8fe6e063 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/CoinItem.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/CoinItem.java @@ -3,37 +3,40 @@ */ package com.someguyssoftware.treasure2.item; +import static com.someguyssoftware.treasure2.Treasure.logger; + import java.util.ArrayList; import java.util.List; -import java.util.Map; +import java.util.Optional; import java.util.Random; -import java.util.Map.Entry; import com.someguyssoftware.gottschcore.cube.Cube; import com.someguyssoftware.gottschcore.item.ModItem; -import com.someguyssoftware.gottschcore.loot.LootTable; import com.someguyssoftware.gottschcore.positional.Coords; import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.gottschcore.world.WorldInfo; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.IWishingWellBlock; -import com.someguyssoftware.treasure2.block.TreasureBlocks; import com.someguyssoftware.treasure2.config.TreasureConfig; import com.someguyssoftware.treasure2.enums.Coins; import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.wish.IWishable; +import com.someguyssoftware.treasure2.loot.LootPoolShell; +import com.someguyssoftware.treasure2.loot.LootTableShell; -import net.minecraft.block.Block; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootPool; /** * @@ -101,7 +104,6 @@ public boolean onEntityItemUpdate(EntityItem entityItem) { for (int z = 0; z < 3; z++) { for (int x = 0; x < 3; x++) { Cube checkCube = new Cube(world, checkCoords); -// if (checkCube.equalsBlock(TreasureBlocks.WISHING_WELL_BLOCK)) { if (checkCube.toBlock() instanceof IWishingWellBlock) { numWishingWellBlocks++; } @@ -132,16 +134,16 @@ public boolean onEntityItemUpdate(EntityItem entityItem) { * @param coords */ private void generateLootItem(World world, Random random, EntityItem entityItem, ICoords coords) { - List lootTables = new ArrayList<>(); + List lootTables = new ArrayList<>(); // determine coin type if (getCoin() == Coins.SILVER) { - lootTables.addAll(Treasure.LOOT_TABLES.getLootTableByRarity(Rarity.UNCOMMON)); - lootTables.addAll(Treasure.LOOT_TABLES.getLootTableByRarity(Rarity.SCARCE)); + lootTables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.UNCOMMON)); + lootTables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.SCARCE)); } else if (getCoin() == Coins.GOLD) { - lootTables.addAll(Treasure.LOOT_TABLES.getLootTableByRarity(Rarity.SCARCE)); - lootTables.addAll(Treasure.LOOT_TABLES.getLootTableByRarity(Rarity.RARE)); + lootTables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.SCARCE)); + lootTables.addAll(Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.RARE)); } ItemStack stack = null; @@ -150,14 +152,53 @@ else if (getCoin() == Coins.GOLD) { stack = new ItemStack(Items.APPLE); } else { - // select a table - LootTable table = lootTables.get(RandomHelper.randomInt(random, 0, lootTables.size()-1)); + // select a table shell + LootTableShell tableShell = lootTables.get(RandomHelper.randomInt(random, 0, lootTables.size()-1)); + if (tableShell.getResourceLocation() == null) { + return; + } + + // get the vanilla table from shell + net.minecraft.world.storage.loot.LootTable table = world.getLootTableManager().getLootTableFromLocation(tableShell.getResourceLocation()); + // get a list of loot pools + List lootPoolShells = tableShell.getPools(); + + List itemStacks = new ArrayList<>(); + for (LootPoolShell pool : lootPoolShells) { + logger.debug("coin: processing pool -> {}", pool.getName()); + // go get the vanilla managed pool + LootPool lootPool = table.getPool(pool.getName()); + + // geneate loot from pools + lootPool.generateLoot(itemStacks, random, Treasure.LOOT_TABLE_MASTER.getContext()); + } - // generate a list of itemStacks from the table pools - List list =table.generateLootFromPools(random, Treasure.LOOT_TABLES.getContext()); + // get effective rarity + Rarity effectiveRarity = Treasure.LOOT_TABLE_MASTER.getEffectiveRarity(tableShell, (getCoin() == Coins.SILVER) ? Rarity.UNCOMMON : Rarity.SCARCE); + logger.debug("coin: using effective rarity -> {}", effectiveRarity); + + // get all injected loot tables + logger.debug("coin: searching for injectable tables for category ->{}, rarity -> {}", tableShell.getCategory(), effectiveRarity); + Optional> injectLootTableShells = buildInjectedLootTableList(tableShell.getCategory(), effectiveRarity); + if (injectLootTableShells.isPresent()) { + logger.debug("coin: found injectable tables for category ->{}, rarity -> {}", tableShell.getCategory(), effectiveRarity); + logger.debug("coin: size of injectable tables -> {}", injectLootTableShells.get().size()); + // attempt to get the player who dropped the coin + ItemStack coinItem = entityItem.getItem(); + NBTTagCompound nbt = coinItem.getTagCompound(); + EntityPlayer player = null; + if (nbt != null && nbt.hasKey(DROPPED_BY_KEY)) { + player = world.getPlayerEntityByName(nbt.getString(DROPPED_BY_KEY)); + if (player != null && logger.isDebugEnabled()) { + logger.debug("coin dropped by player -> {}", player.getName()); + } + } + itemStacks.addAll(getLootItems(world, random, injectLootTableShells.get(), getLootContext(world, player))); + } + // select one item randomly - stack = list.get(RandomHelper.randomInt(0, list.size()-1)); + stack = itemStacks.get(RandomHelper.randomInt(0, itemStacks.size()-1)); } // spawn the item diff --git a/src/main/java/com/someguyssoftware/treasure2/item/PearlItem.java b/src/main/java/com/someguyssoftware/treasure2/item/PearlItem.java index eefa69b14..020782d4d 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/PearlItem.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/PearlItem.java @@ -3,13 +3,15 @@ */ package com.someguyssoftware.treasure2.item; +import static com.someguyssoftware.treasure2.Treasure.logger; + import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.Random; import com.someguyssoftware.gottschcore.cube.Cube; import com.someguyssoftware.gottschcore.item.ModItem; -import com.someguyssoftware.gottschcore.loot.LootTable; import com.someguyssoftware.gottschcore.positional.Coords; import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.gottschcore.random.RandomHelper; @@ -17,18 +19,24 @@ import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.IWishingWellBlock; import com.someguyssoftware.treasure2.enums.Pearls; +import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.wish.IWishable; +import com.someguyssoftware.treasure2.loot.LootPoolShell; +import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootPool; /** * @@ -75,6 +83,9 @@ public void addInformation(ItemStack stack, World worldIn, List tooltip, */ @Override public boolean onEntityItemUpdate(EntityItem entityItem) { + // get the item stack or number of items. + ItemStack entityItemStack = entityItem.getItem(); + World world = entityItem.getEntityWorld(); if (WorldInfo.isClientSide(world)) { return super.onEntityItemUpdate(entityItem); @@ -91,7 +102,6 @@ public boolean onEntityItemUpdate(EntityItem entityItem) { for (int z = 0; z < 3; z++) { for (int x = 0; x < 3; x++) { Cube checkCube = new Cube(world, checkCoords); -// if (checkCube.equalsBlock(TreasureBlocks.WISHING_WELL_BLOCK)) { if (checkCube.toBlock() instanceof IWishingWellBlock) { numWishingWellBlocks++; } @@ -100,42 +110,13 @@ public boolean onEntityItemUpdate(EntityItem entityItem) { } } } - - List lootTables = new ArrayList<>(); + if (numWishingWellBlocks >=2) { Random random = new Random(); - - // determine pearl type - if (getPearl() == Pearls.WHITE) { - lootTables.add(Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.WHITE_PEARL_WELL)); + for (int itemIndex = 0; itemIndex < entityItemStack.getCount(); itemIndex++) { + // generate an item for each item in the stack + generateLootItem(world, random, entityItem, coords); } - else if (getPearl() == Pearls.BLACK) { - lootTables.add(Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.BLACK_PEARL_WELL)); - } - - ItemStack stack = null; - // handle if loot tables is null or size = 0. return an item (apple) to ensure continuing functionality - if (lootTables == null || lootTables.size() == 0) { - stack = new ItemStack(Items.DIAMOND); - } - else { - // select a table - LootTable table = lootTables.get(RandomHelper.randomInt(random, 0, lootTables.size()-1)); - - // generate a list of itemStacks from the table pools - List list =table.generateLootFromPools(random, Treasure.LOOT_TABLES.getContext()); - - // select one item randomly - stack = list.get(random.nextInt(list.size())); - } - - // spawn the item - if (stack != null) { - InventoryHelper.spawnItemStack(world, (double)coords.getX(), (double)coords.getY()+1, (double)coords.getZ(), stack); - } - - // remove the item entity - entityItem.setDead(); return true; } } @@ -143,6 +124,90 @@ else if (getPearl() == Pearls.BLACK) { return super.onEntityItemUpdate(entityItem); } + /** + * + * @param world + * @param random + * @param entityItem + * @param coords + */ + private void generateLootItem(World world, Random random, EntityItem entityItem, ICoords coords) { + List lootTables = new ArrayList<>(); + + // determine pearl type + if (getPearl() == Pearls.WHITE) { + lootTables.add(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.WHITE_PEARL_WELL)); + } + else if (getPearl() == Pearls.BLACK) { + lootTables.add(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.BLACK_PEARL_WELL)); + } + + ItemStack stack = null; + // handle if loot tables is null or size = 0. return an item (apple) to ensure continuing functionality + if (lootTables == null || lootTables.size() == 0) { + stack = new ItemStack(Items.DIAMOND); + } + else { + // select a table + LootTableShell tableShell = lootTables.get(RandomHelper.randomInt(random, 0, lootTables.size()-1)); + logger.debug("pearl: tableShell -> {}", tableShell.toString()); + if (tableShell.getResourceLocation() == null) { + return; + } + + // get the vanilla table from shell + net.minecraft.world.storage.loot.LootTable table = world.getLootTableManager().getLootTableFromLocation(tableShell.getResourceLocation()); + // get a list of loot pools + List lootPoolShells = tableShell.getPools(); + + List itemStacks = new ArrayList<>(); + for (LootPoolShell pool : lootPoolShells) { + logger.debug("pearl: processing pool -> {}", pool.getName()); + // go get the vanilla managed pool + LootPool lootPool = table.getPool(pool.getName()); + + // geneate loot from pools + lootPool.generateLoot(itemStacks, random, Treasure.LOOT_TABLE_MASTER.getContext()); + } + + // get effective rarity + Rarity effectiveRarity = Treasure.LOOT_TABLE_MASTER.getEffectiveRarity(tableShell, (getPearl() == Pearls.WHITE) ? Rarity.UNCOMMON : Rarity.SCARCE); + logger.debug("pearl: using effective rarity -> {}", effectiveRarity); + + // get all injected loot tables + logger.debug("pearl: searching for injectable tables for category ->{}, rarity -> {}", tableShell.getCategory(), effectiveRarity); + Optional> injectLootTableShells = buildInjectedLootTableList(tableShell.getCategory(), effectiveRarity); + if (injectLootTableShells.isPresent()) { + logger.debug("pearl: found injectable tables for category ->{}, rarity -> {}", tableShell.getCategory(), effectiveRarity); + logger.debug("pearl: size of injectable tables -> {}", injectLootTableShells.get().size()); + + // attempt to get the player who dropped the coin + ItemStack coinItem = entityItem.getItem(); + NBTTagCompound nbt = coinItem.getTagCompound(); + EntityPlayer player = null; + if (nbt != null && nbt.hasKey(DROPPED_BY_KEY)) { + player = world.getPlayerEntityByName(nbt.getString(DROPPED_BY_KEY)); + if (player != null && logger.isDebugEnabled()) { + logger.debug("pearl dropped by player -> {}", player.getName()); + } + } + itemStacks.addAll(getLootItems(world, random, injectLootTableShells.get(), getLootContext(world, player))); + } + + // select one item randomly + stack = itemStacks.get(RandomHelper.randomInt(0, itemStacks.size()-1)); + + } + + // spawn the item + if (stack != null) { + InventoryHelper.spawnItemStack(world, (double)coords.getX(), (double)coords.getY()+1, (double)coords.getZ(), stack); + } + + // remove the item entity + entityItem.setDead(); + } + /** * @return the pearl */ diff --git a/src/main/java/com/someguyssoftware/treasure2/item/wish/IWishable.java b/src/main/java/com/someguyssoftware/treasure2/item/wish/IWishable.java index 8d84dcf98..51b9fc1de 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/wish/IWishable.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/wish/IWishable.java @@ -5,19 +5,74 @@ import java.util.List; import java.util.Optional; +import java.util.Random; import com.someguyssoftware.gottschcore.positional.ICoords; +import com.someguyssoftware.treasure2.Treasure; +import com.someguyssoftware.treasure2.enums.Rarity; +import com.someguyssoftware.treasure2.loot.LootTableShell; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2; import com.someguyssoftware.treasure2.wish.IWishProvider; import com.someguyssoftware.treasure2.wish.IWishProviderFunction; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootContext; /** * @author Mark Gottschling on Apr 24, 2020 * */ public interface IWishable { - + public static final String DROPPED_BY_KEY = "droppedBy"; + + /** + * + * @param key + * @param rarity + * @return + */ + default public Optional> buildInjectedLootTableList(String key, Rarity rarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getLootTableByKeyRarity(TreasureLootTableMaster2.ManagedTableType.INJECT, key, rarity)); + } + + /** + * + * @param world + * @param random + * @param list + * @param lootContext + * @return + */ + default public List getLootItems(World world, Random random, List list, LootContext lootContext) { + return Treasure.LOOT_TABLE_MASTER.getInjectedLootItems(world, random, list, lootContext); + } + + /** + * + * @return + */ + default public LootContext getLootContext() { + return Treasure.LOOT_TABLE_MASTER.getContext(); + } + + /** + * + * @param world + * @param player + * @return + */ + default public LootContext getLootContext(World world, EntityPlayer player) { + if (player == null) return getLootContext(); + LootContext lootContext = new LootContext.Builder((WorldServer) world) + .withLuck(player.getLuck()) + .withPlayer(player) + .build(); + return lootContext; + } + /** * * @param world diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java index cda6d271b..3d813e455 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java @@ -3,6 +3,8 @@ */ package com.someguyssoftware.treasure2.loot; +import static com.someguyssoftware.treasure2.Treasure.logger; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -23,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Random; import java.util.stream.Stream; import org.apache.commons.io.FilenameUtils; @@ -34,13 +37,15 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonParseException; import com.someguyssoftware.gottschcore.GottschCore; -import com.someguyssoftware.gottschcore.loot.LootTableMaster; import com.someguyssoftware.gottschcore.mod.IMod; import com.someguyssoftware.gottschcore.version.BuildVersion; import com.someguyssoftware.gottschcore.version.VersionChecker; +import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootContext; import net.minecraft.world.storage.loot.LootTableManager; import net.minecraft.world.storage.loot.RandomValueRange; @@ -52,14 +57,13 @@ public class LootTableMaster2 implements ILootTableMaster { public static Logger LOGGER = LogManager.getLogger(GottschCore.logger.getName()); public static final String LOOT_TABLES_FOLDER = "loot_tables"; - private static final String BASE_FOLDER = "base"; - private static final String INJECT_FOLDER = "inject"; private static final Gson GSON_INSTANCE = (new GsonBuilder()) .registerTypeAdapter(RandomValueRange.class, new RandomValueRange.Serializer()).create(); private final IMod mod; private File worldDataBaseFolder; + private LootContext context; /** * @@ -84,6 +88,7 @@ public LootTableMaster2(IMod mod, File folder) { public void init(WorldServer world) { Path path = Paths.get(world.getSaveHandler().getWorldDirectory().getPath(), "data", "loot_tables"); setWorldDataBaseFolder(path.toFile()); + this.context = new LootContext.Builder(world).build(); } @Override @@ -281,7 +286,7 @@ protected void exposeLootTable(String resourceRootPath, String modID, String loc * @param fileSystemFilePath */ private void copyResourceToFileSystem(Path resourceFilePath, Path fileSystemFilePath) { - InputStream is = LootTableMaster.class.getResourceAsStream(resourceFilePath.toString()); + InputStream is = LootTableMaster2.class.getResourceAsStream(resourceFilePath.toString()); try (FileOutputStream fos = new FileOutputStream(fileSystemFilePath.toFile())) { byte[] buf = new byte[2048]; int r; @@ -545,6 +550,31 @@ public Optional loadLootTable(File folder, ResourceLocation reso } } + /** + * + * @param world + * @param random + * @param list + * @param lootContext + * @return + */ + public List getInjectedLootItems(World world, Random random, List list, + LootContext lootContext) { + List itemStacks = new ArrayList<>(); + + for (LootTableShell injectLootTableShell : list) { + logger.debug("injectable resource -> {}", injectLootTableShell.getResourceLocation()); + // get the vanilla managed loot table + net.minecraft.world.storage.loot.LootTable injectLootTable = world.getLootTableManager().getLootTableFromLocation(injectLootTableShell.getResourceLocation()); + if (injectLootTable != null) { + // add loot from tables to itemStacks + itemStacks.addAll(injectLootTable.generateLootForPools(random, lootContext)); + logger.debug("size of item stacks after inject -> {}", itemStacks.size()); + } + } + return itemStacks; + } + public File getWorldDataBaseFolder() { return worldDataBaseFolder; } @@ -561,4 +591,12 @@ public IMod getMod() { public Gson getGsonInstance() { return GSON_INSTANCE; } + + public LootContext getContext() { + return context; + } + + public void setContext(LootContext context) { + this.context = context; + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java index f62fa841e..e65102f65 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java @@ -18,6 +18,7 @@ public class LootTableShell { private String version; private String category; private List categories; + private String rarity; private List pools; public LootTableShell() {} @@ -57,7 +58,8 @@ public void setCategories(List categories) { @Override public String toString() { - return "LootTableShell [version=" + version + ", categories=" + getCategories() + "]"; + return "LootTableShell [resourceLocation=" + resourceLocation + ", version=" + version + ", category=" + + category + ", categories=" + categories + ", rarity=" + rarity + "]"; } public String getCategory() { @@ -75,4 +77,12 @@ public ResourceLocation getResourceLocation() { public void setResourceLocation(ResourceLocation resourceLocation) { this.resourceLocation = resourceLocation; } + + public String getRarity() { + return rarity; + } + + public void setRarity(String rarity) { + this.rarity = rarity; + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java index 7e6215ca0..d8af53c48 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java @@ -32,6 +32,7 @@ import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StringUtils; import net.minecraft.world.storage.loot.LootTableList; /** @@ -98,7 +99,6 @@ public static enum ManagedTableType { /* * Guava Table of loot table ResourceLocations for Chests based on LootTableManager-key and Rarity */ - @Deprecated private final Table> CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE = HashBasedTable.create(); /* @@ -112,6 +112,11 @@ public static enum ManagedTableType { * Guava Table of LootTableShell for Chests based on LootTableManager-key and Rarity */ private final Table> CHEST_LOOT_TABLES_TABLE = HashBasedTable.create(); + + /* + * Map of LootTableShell for Chests base on ResourceLocation + */ + private final Map CHEST_LOOT_TABLES_MAP = new HashMap<>(); /* * @@ -146,6 +151,7 @@ public void clear() { super.clear(); CHEST_LOOT_TABLES_TABLE.clear(); CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.clear(); + CHEST_LOOT_TABLES_MAP.clear(); SPECIAL_LOOT_TABLES_MAP.clear(); INJECT_LOOT_TABLES_TABLE.clear(); INJECT_LOOT_TABLES_RESOURCE_LOCATION_TABLE.clear(); @@ -191,6 +197,7 @@ public void register(String modID) { // add loot table to map CHEST_LOOT_TABLES_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(lootTable.get()); LOGGER.debug("tabling loot table: {} {} -> {}", CUSTOM_LOOT_TABLE_KEY, key, resourceLocation); + CHEST_LOOT_TABLES_MAP.put(resourceLocation, lootTable.get()); } else { LOGGER.debug("unable to load loot table from -> {} : {}", getWorldDataBaseFolder(), resourceLocation); @@ -206,19 +213,27 @@ public void register(String modID) { */ for (String location : SPECIAL_CHEST_LOOT_TABLE_FOLDER_LOCATIONS) { List specialLocations = getLootTablesResourceLocations(modID, location); - + LOGGER.debug("size of special chest loot table locations -> {}", specialLocations.size()); // load each ResourceLocation as LootTable and map it. for (ResourceLocation resourceLocation : specialLocations) { Path path = Paths.get(resourceLocation.getResourcePath()); + LOGGER.debug("path to special resource loc -> {}", path.toString()); // create loot table Optional lootTable = loadLootTable(getWorldDataBaseFolder(), resourceLocation); if (lootTable.isPresent()) { + // add resource location to table + lootTable.get().setResourceLocation(resourceLocation); // add to map SpecialLootTables specialLootTables = SpecialLootTables.valueOf(com.google.common.io.Files.getNameWithoutExtension(path.getName(path.getNameCount()-1).toString().toUpperCase())); + LOGGER.debug("special loot tables enum -> {}", specialLootTables); // add to map SPECIAL_LOOT_TABLES_MAP.put(specialLootTables, lootTable.get()); + LOGGER.debug("tabling special loot table: {} -> {}", specialLootTables, resourceLocation); LootTableList.register(resourceLocation); } + else { + LOGGER.debug("unable to load special loot table from -> {} : {}", getWorldDataBaseFolder(), resourceLocation); + } } } @@ -237,8 +252,12 @@ public void register(String modID) { // create loot table Optional lootTable = loadLootTable(getWorldDataBaseFolder(), resourceLocation); if (lootTable.isPresent()) { + // add resource location to table + lootTable.get().setResourceLocation(resourceLocation); + LOGGER.debug("loaded inject loot table shell -> {}", resourceLocation); List keys = lootTable.get().getCategories(); keys.forEach(key -> { + LOGGER.debug("using inject key to table -> {}", key); key = key.isEmpty() ? "general" : key; if (!INJECT_LOOT_TABLES_RESOURCE_LOCATION_TABLE.containsRow(key)) { // initialize @@ -249,6 +268,7 @@ public void register(String modID) { } INJECT_LOOT_TABLES_RESOURCE_LOCATION_TABLE.get(key, rarity).add(resourceLocation); INJECT_LOOT_TABLES_TABLE.get(key, rarity).add(lootTable.get()); + LOGGER.debug("tabling inject loot table: {} {} -> {}", key, rarity, resourceLocation); }); } LootTableList.register(resourceLocation); @@ -340,6 +360,16 @@ public List getLootTableByRarity(Rarity rarity) { return tables; } + /** + * + * @param location + * @return + */ + public Optional getLootTableByResourceLocation(ResourceLocation location) { + LootTableShell lootTableShell = CHEST_LOOT_TABLES_MAP.get(location); + return Optional.ofNullable(lootTableShell); + } + /** * * @param tableType @@ -379,7 +409,6 @@ public List getLootTableByKeyRarity(ManagedTableType tableType, * @param rarity * @return */ - @Deprecated public List getLootTableResourceByRarity(Rarity rarity) { // get all loot tables by column key List tables = new ArrayList<>(); @@ -397,7 +426,19 @@ public List getLootTableResourceByRarity(Rarity rarity) { * @return */ public LootTableShell getSpecialLootTable(SpecialLootTables table) { + Treasure.logger.debug("searching for special loot table --> {}", table); + LootTableShell lootTable = SPECIAL_LOOT_TABLES_MAP.get(table); return lootTable; } + + /** + * + * @param lootTableShell + * @param defaultRarity + * @return + */ + public Rarity getEffectiveRarity(LootTableShell lootTableShell, Rarity defaultRarity) { + return !StringUtils.isNullOrEmpty(lootTableShell.getRarity()) ? Rarity.getByValue(lootTableShell.getRarity().toLowerCase()) : defaultRarity; + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/persistence/GenDataPersistence.java b/src/main/java/com/someguyssoftware/treasure2/persistence/GenDataPersistence.java index cb016815a..599ed0602 100644 --- a/src/main/java/com/someguyssoftware/treasure2/persistence/GenDataPersistence.java +++ b/src/main/java/com/someguyssoftware/treasure2/persistence/GenDataPersistence.java @@ -259,19 +259,21 @@ public NBTTagCompound writeToNBT(NBTTagCompound tag) { // add the oasis gen last count to the treasure compound for each dimension NBTTagList dimTagList = new NBTTagList(); for (Entry entry : oasisGen.getChunksSinceLastDimensionOasis().entrySet()) { - Treasure.logger.debug("dimension ID -> {}", entry.getKey()); + Treasure.logger.debug("oasis dimension ID -> {}", entry.getKey()); NBTTagCompound dimTag = new NBTTagCompound(); dimTag.setInteger(DIMENSION_ID_TAG_NAME, entry.getKey()); dimTag.setInteger(CHUNKS_SINCE_LAST_OASIS_TAG_NAME, entry.getValue()); - + Treasure.logger.debug("chunks since last oasis -> {}", entry.getValue()); Map biomeMap = oasisGen.getChunksSinceLastDimensionBiomeOasis().get(entry.getKey()); - Treasure.logger.debug("biome map size -> {}", biomeMap.size()); + Treasure.logger.debug("oasis biome map size -> {}", biomeMap.size()); + NBTTagList biomeTagList = new NBTTagList(); for (Entry biomeEntry : biomeMap.entrySet()) { NBTTagCompound biomeTag = new NBTTagCompound(); biomeTag.setInteger(BIOME_ID_TAG_NAME, biomeEntry.getKey()); biomeTag.setInteger(CHUNKS_SINCE_LAST_OASIS_TAG_NAME, biomeEntry.getValue()); + Treasure.logger.debug("chunks since last biome {} oasis -> {}", biomeEntry.getKey(), biomeEntry.getValue()); biomeTagList.appendTag(biomeTag); } dimTag.setTag(BIOMES_TAG_NAME, biomeTagList); diff --git a/src/main/java/com/someguyssoftware/treasure2/tileentity/AbstractTreasureChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/AbstractTreasureChestTileEntity.java index 391f0326b..8b674ac32 100644 --- a/src/main/java/com/someguyssoftware/treasure2/tileentity/AbstractTreasureChestTileEntity.java +++ b/src/main/java/com/someguyssoftware/treasure2/tileentity/AbstractTreasureChestTileEntity.java @@ -31,6 +31,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -55,12 +56,17 @@ public class GenerationContext { * */ private ChestGeneratorType chestGeneratorType; - + public GenerationContext(Rarity rarity, ChestGeneratorType chestGeneratorType) { this.lootRarity = rarity; this.chestGeneratorType = chestGeneratorType; } + public GenerationContext(ResourceLocation lootTable, Rarity rarity, ChestGeneratorType chestGeneratorType) { + this.lootRarity = rarity; + this.chestGeneratorType = chestGeneratorType; + } + public Rarity getLootRarity() { return lootRarity; } @@ -69,6 +75,10 @@ public ChestGeneratorType getChestGeneratorType() { return chestGeneratorType; } + public ResourceLocation getLootTable() { + return lootTable; + } + } /* @@ -87,6 +97,8 @@ public ChestGeneratorType getChestGeneratorType() { */ private boolean sealed; + private ResourceLocation lootTable; + /* * Properties detailing how the tile entity was generated */ @@ -249,6 +261,9 @@ public NBTTagCompound writePropertiesToNBT(NBTTagCompound sourceTag) { // logger.debug("Writing FACING to NBT ->{}", getFacing()); sourceTag.setInteger("facing", getFacing()); sourceTag.setBoolean("sealed", isSealed()); + if (getLootTable() != null) { + sourceTag.setString("lootTable", getLootTable().toString()); + } if (getGenerationContext() != null) { NBTTagCompound contextTag = new NBTTagCompound(); contextTag.setString("lootRarity", getGenerationContext().getLootRarity().getValue()); @@ -339,6 +354,11 @@ public void readPropertiesFromNBT(NBTTagCompound sourceTag) { if (sourceTag.hasKey("sealed")) { this.setSealed(sourceTag.getBoolean("sealed")); } + if (sourceTag.hasKey("lootTable")) { + if (!sourceTag.getString("lootTable").isEmpty()) { + this.setLootTable(new ResourceLocation(sourceTag.getString("lootTable"))); + } + } if (sourceTag.hasKey("genContext")) { NBTTagCompound contextTag = sourceTag.getCompoundTag("genContext"); Rarity rarity = null; @@ -723,4 +743,12 @@ public GenerationContext getGenerationContext() { public void setGenerationContext(GenerationContext context) { generationContext = context; } + + public ResourceLocation getLootTable() { + return lootTable; + } + + public void setLootTable(ResourceLocation lootTable) { + this.lootTable = lootTable; + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/worldgen/SurfaceChestWorldGenerator.java b/src/main/java/com/someguyssoftware/treasure2/worldgen/SurfaceChestWorldGenerator.java index 96b9ed374..1dd7a0370 100644 --- a/src/main/java/com/someguyssoftware/treasure2/worldgen/SurfaceChestWorldGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/worldgen/SurfaceChestWorldGenerator.java @@ -262,7 +262,7 @@ else if (biomeCheck == Result.OK) { // 3. check against all registered chests if (isRegisteredChestWithinDistance(world, coords, TreasureConfig.CHESTS.surfaceChests.minDistancePerChest)) { - Treasure.logger.debug("The distance to the nearest treasure chest is less than the minimun required."); +// Treasure.logger.debug("The distance to the nearest treasure chest is less than the minimun required."); return; } diff --git a/src/main/resources/assets/treasure2/lang/en_US.lang b/src/main/resources/assets/treasure2/lang/en_US.lang index c6a93f0f7..39d7cbbe8 100644 --- a/src/main/resources/assets/treasure2/lang/en_US.lang +++ b/src/main/resources/assets/treasure2/lang/en_US.lang @@ -98,7 +98,7 @@ item.treasure2:charmed_gold_coin.name=Charmed Gold Coin item.treasure2:charmed_ruby.name=Charmed Ruby item.treasure2:charmed_sapphire.name=Charmed Sapphire -item.treasure2:angel_blessed.name=Angel Blessed Coin +item.treasure2:angel_blessed.name=Angel Blessed Gem item.treasure2:fools_coin.name=Fool's Coin item.treasure2:miners_friend.name=Miner's Friend item.treasure2:medics_token.name=Medic's Token diff --git a/src/main/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json index b37b8f3b8..156272acd 100644 --- a/src/main/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/common/armor_tool_chest.json @@ -1,5 +1,6 @@ { "version" : "1.0.0", "category": "armor", + "rarity": "common", "pools": [ { "name": "treasure", @@ -11,7 +12,7 @@ "weight": 30 } ] - }, + }, { "name": "items", "rolls": { @@ -37,7 +38,7 @@ "type": "loot_table", "name": "treasure2:pools/armor/common", "weight": 1 - } + } ] }, { @@ -51,8 +52,8 @@ "type": "loot_table", "name": "treasure2:pools/tools/common", "weight": 1 - } + } ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/common/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/common/food_potion_chest.json index 071ca0b59..c60f1d859 100644 --- a/src/main/resources/loot_tables/treasure2/chests/common/food_potion_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/common/food_potion_chest.json @@ -1,6 +1,7 @@ { "version" : "1.0.0", "category": "food", + "rarity": "common", "pools": [ { "name": "treasure", @@ -12,7 +13,7 @@ "weight": 30 } ] - }, + }, { "name": "items", "rolls": { @@ -36,7 +37,7 @@ "type": "loot_table", "name": "treasure2:pools/food/common", "weight": 1 - } + } ] }, @@ -52,8 +53,8 @@ "type": "loot_table", "name": "treasure2:pools/potions/common", "weight": 1 - } + } ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json index b98be50b6..f6b3add00 100644 --- a/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/common/general_chest.json @@ -1,6 +1,7 @@ { "version" : "1.0.0", "category": "general", + "rarity": "common", "pools": [ { "name": "treasure", @@ -85,4 +86,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/epic/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/epic/general_chest.json index 37c5dd827..a9334c3e7 100644 --- a/src/main/resources/loot_tables/treasure2/chests/epic/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/epic/general_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "general", + "rarity": "epic", "pools": [ { "name": "treasure", @@ -29,7 +30,7 @@ "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -55,7 +56,7 @@ "type": "loot_table", "name": "treasure2:loot_tables/treasure2/armor/epic", "weight": 1 - } + } ] }, { @@ -69,7 +70,7 @@ "type": "loot_table", "name": "treasure2:loot_tables/treasure2/food/epic", "weight": 1 - } + } ] }, { @@ -80,7 +81,7 @@ "type": "loot_table", "name": "treasure2:loot_tables/treasure2/tools/epic", "weight": 1 - } + } ] }, { @@ -94,7 +95,7 @@ "type": "loot_table", "name": "treasure2:loot_tables/treasure2/potions/epic", "weight": 1 - } + } ] }, @@ -123,7 +124,7 @@ "type": "loot_table", "name": "treasure2:loot_tables/treasure2/armor/rare", "weight": 1 - } + } ] }, { @@ -137,7 +138,7 @@ "type": "loot_table", "name": "treasure2:loot_tables/treasure2/food/rare", "weight": 1 - } + } ] }, { @@ -151,7 +152,7 @@ "type": "loot_table", "name": "treasure2:loot_tables/treasure2/tools/rare", "weight": 1 - } + } ] }, { @@ -165,8 +166,8 @@ "type": "loot_table", "name": "treasure2:loot_tables/treasure2/potions/rare", "weight": 1 - } + } ] - } + } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json index 591677696..ebaa0c306 100644 --- a/src/main/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/rare/armor_tool_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "armor", + "rarity": "rare", "pools": [ { "name": "treasure", @@ -11,22 +12,22 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/rare", + "name": "treasure2:pools/treasure/rare", "weight": 30 } ] - }, + }, { "name": "charms", "rolls": 1, "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/rare_charms", + "name": "treasure2:pools/treasure/rare_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -36,7 +37,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/rare", + "name": "treasure2:pools/items/rare", "weight": 1 } ] @@ -50,9 +51,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/rare", + "name": "treasure2:pools/armor/rare", "weight": 1 - } + } ] }, { @@ -64,9 +65,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/rare", + "name": "treasure2:pools/food/rare", "weight": 1 - } + } ] }, { @@ -75,12 +76,12 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/rare", + "name": "treasure2:pools/tools/rare", "weight": 1 - } + } ] - }, - + }, + { "name": "scarce_items", "rolls": { @@ -90,7 +91,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/scarce", + "name": "treasure2:pools/items/scarce", "weight": 1 } ] @@ -104,9 +105,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/scarce", + "name": "treasure2:pools/armor/scarce", "weight": 1 - } + } ] }, { @@ -118,9 +119,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/scarce", + "name": "treasure2:pools/food/scarce", "weight": 1 - } + } ] }, { @@ -132,10 +133,10 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/scarce", + "name": "treasure2:pools/tools/scarce", "weight": 1 - } + } ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json index 49fadc079..17a088842 100644 --- a/src/main/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/rare/food_potion_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "food", + "rarity": "rare", "pools": [ { "name": "treasure", @@ -11,7 +12,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/rare", + "name": "treasure2:pools/treasure/rare", "weight": 30 } ] @@ -22,11 +23,11 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/rare_charms", + "name": "treasure2:pools/treasure/rare_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -36,7 +37,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/rare", + "name": "treasure2:pools/items/rare", "weight": 1 } ] @@ -51,9 +52,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/rare", + "name": "treasure2:pools/food/rare", "weight": 1 - } + } ] }, @@ -66,9 +67,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/rare", + "name": "treasure2:pools/potions/rare", "weight": 1 - } + } ] }, { @@ -80,7 +81,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/scarce", + "name": "treasure2:pools/items/scarce", "weight": 1 } ] @@ -95,9 +96,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/scarce", + "name": "treasure2:pools/food/scarce", "weight": 1 - } + } ] }, @@ -110,10 +111,10 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/scarce", + "name": "treasure2:pools/potions/scarce", "weight": 1 - } + } ] - } + } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/rare/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/rare/general_chest.json index 8d9c27db1..77d477264 100644 --- a/src/main/resources/loot_tables/treasure2/chests/rare/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/rare/general_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "general", + "rarity": "rare", "pools": [ { "name": "treasure", @@ -11,22 +12,22 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/rare", + "name": "treasure2:pools/treasure/rare", "weight": 30 } ] - }, + }, { "name": "charms", "rolls": 1, "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/rare_charms", + "name": "treasure2:pools/treasure/rare_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -36,7 +37,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/rare", + "name": "treasure2:pools/items/rare", "weight": 1 } ] @@ -50,9 +51,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/rare", + "name": "treasure2:pools/armor/rare", "weight": 1 - } + } ] }, { @@ -64,9 +65,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/rare", + "name": "treasure2:pools/food/rare", "weight": 1 - } + } ] }, { @@ -78,9 +79,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/rare", + "name": "treasure2:pools/tools/rare", "weight": 1 - } + } ] }, { @@ -92,9 +93,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/rare", + "name": "treasure2:pools/potions/rare", "weight": 1 - } + } ] }, @@ -107,7 +108,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/scarce", + "name": "treasure2:pools/items/scarce", "weight": 1 } ] @@ -121,9 +122,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/scarce", + "name": "treasure2:pools/armor/scarce", "weight": 1 - } + } ] }, { @@ -135,9 +136,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/scarce", + "name": "treasure2:pools/food/scarce", "weight": 1 - } + } ] }, { @@ -149,9 +150,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/scarce", + "name": "treasure2:pools/tools/scarce", "weight": 1 - } + } ] }, { @@ -163,10 +164,10 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/scarce", + "name": "treasure2:pools/potions/scarce", "weight": 1 - } + } ] - } + } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json index d5601f9f0..369937715 100644 --- a/src/main/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/scarce/armor_tool_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "armor", + "rarity": "scarce", "pools": [ { "name": "treasure", @@ -11,11 +12,11 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/scarce", + "name": "treasure2:pools/treasure/scarce", "weight": 30 } ] - }, + }, { "name": "charms", "rolls": { @@ -25,11 +26,11 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/scarce_charms", + "name": "treasure2:pools/treasure/scarce_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -39,7 +40,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/scarce", + "name": "treasure2:pools/items/scarce", "weight": 1 } ] @@ -53,9 +54,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/scarce", + "name": "treasure2:pools/armor/scarce", "weight": 1 - } + } ] }, { @@ -67,9 +68,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/scarce", + "name": "treasure2:pools/food/scarce", "weight": 1 - } + } ] }, { @@ -81,12 +82,12 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/scarce", + "name": "treasure2:pools/tools/scarce", "weight": 1 - } + } ] - }, - + }, + { "name": "uncommon_items", "rolls": { @@ -96,7 +97,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/uncommon", + "name": "treasure2:pools/items/uncommon", "weight": 1 } ] @@ -110,9 +111,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/uncommon", + "name": "treasure2:pools/armor/uncommon", "weight": 1 - } + } ] }, { @@ -124,9 +125,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/uncommon", + "name": "treasure2:pools/food/uncommon", "weight": 1 - } + } ] }, { @@ -138,10 +139,10 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/uncommon", + "name": "treasure2:pools/tools/uncommon", "weight": 1 - } + } ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json index 3eab355aa..54c6ee271 100644 --- a/src/main/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/scarce/food_potion_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "food", + "rarity": "scarce", "pools": [ { "name": "treasure", @@ -11,11 +12,11 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/scarce", + "name": "treasure2:pools/treasure/scarce", "weight": 30 } ] - }, + }, { "name": "charms", "rolls": { @@ -25,11 +26,11 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/scarce_charms", + "name": "treasure2:pools/treasure/scarce_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -39,7 +40,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/scarce", + "name": "treasure2:pools/items/scarce", "weight": 1 } ] @@ -54,9 +55,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/scarce", + "name": "treasure2:pools/food/scarce", "weight": 1 - } + } ] }, @@ -69,9 +70,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/scarce", + "name": "treasure2:pools/potions/scarce", "weight": 1 - } + } ] }, { @@ -83,7 +84,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/uncommon", + "name": "treasure2:pools/items/uncommon", "weight": 1 } ] @@ -98,9 +99,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/uncommon", + "name": "treasure2:pools/food/uncommon", "weight": 1 - } + } ] }, @@ -113,10 +114,10 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/uncommon", + "name": "treasure2:pools/potions/uncommon", "weight": 1 - } + } ] - } + } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/scarce/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/scarce/general_chest.json index 2a55c46fc..22bf4e3a6 100644 --- a/src/main/resources/loot_tables/treasure2/chests/scarce/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/scarce/general_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "general", + "rarity": "scarce", "pools": [ { "name": "treasure", @@ -11,22 +12,22 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/scarce", + "name": "treasure2:pools/treasure/scarce", "weight": 30 } ] - }, + }, { "name": "charms", "rolls": 1, "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/scarce_charms", + "name": "treasure2:pools/treasure/scarce_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -36,7 +37,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/scarce", + "name": "treasure2:pools/items/scarce", "weight": 1 } ] @@ -50,9 +51,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/scarce", + "name": "treasure2:pools/armor/scarce", "weight": 1 - } + } ] }, { @@ -64,9 +65,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/scarce", + "name": "treasure2:pools/food/scarce", "weight": 1 - } + } ] }, { @@ -78,9 +79,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/scarce", + "name": "treasure2:pools/tools/scarce", "weight": 1 - } + } ] }, { @@ -92,9 +93,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/scarce", + "name": "treasure2:pools/potions/scarce", "weight": 1 - } + } ] }, @@ -107,7 +108,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/uncommon", + "name": "treasure2:pools/items/uncommon", "weight": 1 } ] @@ -121,9 +122,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/uncommon", + "name": "treasure2:pools/armor/uncommon", "weight": 1 - } + } ] }, { @@ -135,9 +136,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/uncommon", + "name": "treasure2:pools/food/uncommon", "weight": 1 - } + } ] }, { @@ -149,9 +150,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/uncommon", + "name": "treasure2:pools/tools/uncommon", "weight": 1 - } + } ] }, { @@ -163,10 +164,10 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/uncommon", + "name": "treasure2:pools/potions/uncommon", "weight": 1 - } + } ] - } + } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/special/black_pearl_well.json b/src/main/resources/loot_tables/treasure2/chests/special/black_pearl_well.json index d94755c95..b7b136030 100644 --- a/src/main/resources/loot_tables/treasure2/chests/special/black_pearl_well.json +++ b/src/main/resources/loot_tables/treasure2/chests/special/black_pearl_well.json @@ -1,5 +1,7 @@ { "version": "1.0", + "category": "general", + "rarity": "epic", "pools": [ { "name": "treasure", @@ -10,22 +12,22 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/epic", + "name": "treasure2:pools/treasure/epic", "weight": 1 } ] - }, + }, { "name": "charms", "rolls": 1, "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/epic_charms", + "name": "treasure2:pools/treasure/epic_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -35,7 +37,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/epic", + "name": "treasure2:pools/items/epic", "weight": 1 } ] @@ -49,9 +51,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/epic", + "name": "treasure2:pools/armor/epic", "weight": 1 - } + } ] }, { @@ -63,9 +65,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/epic", + "name": "treasure2:pools/food/epic", "weight": 1 - } + } ] }, { @@ -74,9 +76,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/epic", + "name": "treasure2:pools/tools/epic", "weight": 1 - } + } ] }, { @@ -88,10 +90,10 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/epic", + "name": "treasure2:pools/potions/epic", "weight": 1 - } + } ] - } + } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/special/cauldron_chest.json b/src/main/resources/loot_tables/treasure2/chests/special/cauldron_chest.json index d14128743..2ae089612 100644 --- a/src/main/resources/loot_tables/treasure2/chests/special/cauldron_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/special/cauldron_chest.json @@ -1,5 +1,7 @@ { "version": "1.0", + "category": "general", + "rarity": "epic", "pools": [ { "name": "treasure", @@ -10,7 +12,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/epic", + "name": "treasure2:pools/treasure/epic", "weight": 1 } ] @@ -21,11 +23,11 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/epic_charms", + "name": "treasure2:pools/treasure/epic_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -35,11 +37,11 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/epic", + "name": "treasure2:pools/items/epic", "weight": 1 } ] - }, + }, { "name": "bones", "rolls": 1, @@ -58,7 +60,7 @@ } ], "weight": 20 - } + } ] }, { @@ -93,7 +95,7 @@ "weight": 20 }, { - "entryName": "pufferfish", + "entryName": "pufferfish", "type": "item", "name": "minecraft:fish", "functions": [ @@ -103,7 +105,7 @@ } ], "weight": 20 - }, + }, { "entryName": "ghast_tear", "type": "item", @@ -115,9 +117,9 @@ "type": "item", "name": "minecraft:rabbit_foot", "weight": 20 - } + } ] - }, + }, { "name": "books", "rolls": { @@ -173,7 +175,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/common", + "name": "treasure2:pools/potions/common", "weight": 30 } ] @@ -187,7 +189,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/uncommon", + "name": "treasure2:pools/potions/uncommon", "weight": 40 } ] @@ -201,7 +203,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/scarce", + "name": "treasure2:pools/potions/scarce", "weight": 50 } ] @@ -215,7 +217,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/rare", + "name": "treasure2:pools/potions/rare", "weight": 30 } ] @@ -229,10 +231,10 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/rare", + "name": "treasure2:pools/items/rare", "weight": 1 } ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/special/gold_skull_chest.json b/src/main/resources/loot_tables/treasure2/chests/special/gold_skull_chest.json index c52a9a738..f5829ffb9 100644 --- a/src/main/resources/loot_tables/treasure2/chests/special/gold_skull_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/special/gold_skull_chest.json @@ -1,5 +1,7 @@ { "version": "1.0", + "category":"general", + "rarity": "rare", "pools": [ { "name": "treasure", @@ -64,7 +66,7 @@ "type": "item", "name": "treasure2:ruby_key", "weight": 20 - }, + }, { "entryName": "silver_coin", "type": "item", @@ -103,11 +105,11 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/rare_charms", + "name": "treasure2:pools/treasure/rare_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": 4, @@ -161,15 +163,15 @@ "max": 2 } } - ] + ] }, { "entryName": "sapphire", "type": "item", "name": "treasure2:sapphire", - "weight": 15 - } + "weight": 15 + } ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/special/skull_chest.json b/src/main/resources/loot_tables/treasure2/chests/special/skull_chest.json index fbf1e4a7c..642e3320c 100644 --- a/src/main/resources/loot_tables/treasure2/chests/special/skull_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/special/skull_chest.json @@ -1,5 +1,7 @@ { "version": "1.0", + "category": "general", + "rarity": "scarce", "pools": [ { "name": "treasure", @@ -91,11 +93,11 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/scarce_charms", + "name": "treasure2:pools/treasure/scarce_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": 4, @@ -145,4 +147,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/special/white_pearl_well.json b/src/main/resources/loot_tables/treasure2/chests/special/white_pearl_well.json index a5f3467f0..aa48cf2ea 100644 --- a/src/main/resources/loot_tables/treasure2/chests/special/white_pearl_well.json +++ b/src/main/resources/loot_tables/treasure2/chests/special/white_pearl_well.json @@ -1,5 +1,7 @@ { "version": "1.0", + "category":"general", + "rarity": "rare", "pools": [ { "name": "treasure", @@ -10,7 +12,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/rare", + "name": "treasure2:pools/treasure/rare", "weight": 1 } ] @@ -21,11 +23,11 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/rare_charms", + "name": "treasure2:pools/treasure/rare_charms", "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -35,7 +37,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/items/rare", + "name": "treasure2:pools/items/rare", "weight": 1 } ] @@ -49,9 +51,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/armor/rare", + "name": "treasure2:pools/armor/rare", "weight": 1 - } + } ] }, { @@ -63,9 +65,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/food/rare", + "name": "treasure2:pools/food/rare", "weight": 1 - } + } ] }, { @@ -77,9 +79,9 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/tools/rare", + "name": "treasure2:pools/tools/rare", "weight": 1 - } + } ] }, { @@ -91,10 +93,10 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/rare", + "name": "treasure2:pools/potions/rare", "weight": 1 - } + } ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/special/wither_chest.json b/src/main/resources/loot_tables/treasure2/chests/special/wither_chest.json index 542908877..561d8668a 100644 --- a/src/main/resources/loot_tables/treasure2/chests/special/wither_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/special/wither_chest.json @@ -1,6 +1,8 @@ { "version": "1.0", - "pools": [ + "category":"general", + "rarity": "scarce", + "pools": [ { "name": "bones", "rolls": 1, @@ -19,9 +21,9 @@ } ], "weight": 20 - } + } ] - }, + }, { "name": "books", "rolls": { @@ -77,7 +79,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/common", + "name": "treasure2:pools/potions/common", "weight": 30 } ] @@ -91,7 +93,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/uncommon", + "name": "treasure2:pools/potions/uncommon", "weight": 40 } ] @@ -105,7 +107,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/scarce", + "name": "treasure2:pools/potions/scarce", "weight": 50 } ] @@ -119,7 +121,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/potions/rare", + "name": "treasure2:pools/potions/rare", "weight": 30 } ] @@ -130,7 +132,7 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/scarce", + "name": "treasure2:pools/treasure/scarce", "weight": 30 } ] @@ -141,10 +143,10 @@ "entries": [ { "type": "loot_table", - "name": "treasure2:loot_tables/treasure2/treasure/scarce_charms", + "name": "treasure2:pools/treasure/scarce_charms", "weight": 1 } ] - } + } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json b/src/main/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json index 987ade73c..fe199c6a5 100644 --- a/src/main/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/uncommon/armor_tool_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "armor", + "rarity": "uncommon", "pools": [ { "name": "treasure", @@ -12,7 +13,7 @@ "weight": 30 } ] - }, + }, { "name": "charms", "rolls": 1, @@ -23,7 +24,7 @@ "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -49,7 +50,7 @@ "type": "loot_table", "name": "treasure2:pools/armor/uncommon", "weight": 1 - } + } ] }, { @@ -63,7 +64,7 @@ "type": "loot_table", "name": "treasure2:pools/food/uncommon", "weight": 1 - } + } ] }, { @@ -74,10 +75,10 @@ "type": "loot_table", "name": "treasure2:pools/tools/uncommon", "weight": 1 - } + } ] - }, - + }, + { "name": "common_items", "rolls": { @@ -103,7 +104,7 @@ "type": "loot_table", "name": "treasure2:pools/armor/common", "weight": 1 - } + } ] }, { @@ -117,7 +118,7 @@ "type": "loot_table", "name": "treasure2:pools/food/common", "weight": 1 - } + } ] }, { @@ -131,8 +132,8 @@ "type": "loot_table", "name": "treasure2:pools/tools/common", "weight": 1 - } + } ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json b/src/main/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json index d23ceea6a..b7ad10214 100644 --- a/src/main/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/uncommon/food_potion_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "food", + "rarity": "uncommon", "pools": [ { "name": "treasure", @@ -12,7 +13,7 @@ "weight": 30 } ] - }, + }, { "name": "charms", "rolls": 1, @@ -23,7 +24,7 @@ "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -50,7 +51,7 @@ "type": "loot_table", "name": "treasure2:pools/food/uncommon", "weight": 1 - } + } ] }, @@ -65,7 +66,7 @@ "type": "loot_table", "name": "treasure2:pools/potions/uncommon", "weight": 1 - } + } ] }, { @@ -94,7 +95,7 @@ "type": "loot_table", "name": "treasure2:pools/food/common", "weight": 1 - } + } ] }, @@ -109,8 +110,8 @@ "type": "loot_table", "name": "treasure2:pools/potions/common", "weight": 1 - } + } ] - } + } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/chests/uncommon/general_chest.json b/src/main/resources/loot_tables/treasure2/chests/uncommon/general_chest.json index 67a980892..459b6513f 100644 --- a/src/main/resources/loot_tables/treasure2/chests/uncommon/general_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/uncommon/general_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "general", + "rarity": "uncommon", "pools": [ { "name": "treasure", @@ -12,7 +13,7 @@ "weight": 30 } ] - }, + }, { "name": "charms", "rolls": 1, @@ -23,7 +24,7 @@ "weight": 1 } ] - }, + }, { "name": "items", "rolls": { @@ -49,7 +50,7 @@ "type": "loot_table", "name": "treasure2:pools/armor/uncommon", "weight": 1 - } + } ] }, { @@ -63,7 +64,7 @@ "type": "loot_table", "name": "treasure2:pools/food/uncommon", "weight": 1 - } + } ] }, { @@ -77,7 +78,7 @@ "type": "loot_table", "name": "treasure2:pools/tools/uncommon", "weight": 1 - } + } ] }, { @@ -91,7 +92,7 @@ "type": "loot_table", "name": "treasure2:pools/potions/uncommon", "weight": 1 - } + } ] }, @@ -120,7 +121,7 @@ "type": "loot_table", "name": "treasure2:pools/armor/common", "weight": 1 - } + } ] }, { @@ -134,7 +135,7 @@ "type": "loot_table", "name": "treasure2:pools/food/common", "weight": 1 - } + } ] }, { @@ -148,7 +149,7 @@ "type": "loot_table", "name": "treasure2:pools/tools/common", "weight": 1 - } + } ] }, { @@ -162,8 +163,8 @@ "type": "loot_table", "name": "treasure2:pools/potions/common", "weight": 1 - } + } ] - } + } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/pools/items/common.json b/src/main/resources/loot_tables/treasure2/pools/items/common.json index e9b6db794..0ee062962 100644 --- a/src/main/resources/loot_tables/treasure2/pools/items/common.json +++ b/src/main/resources/loot_tables/treasure2/pools/items/common.json @@ -18,7 +18,22 @@ "max": 5 } } - ] + ] + }, + { + "entryName": "apple", + "type": "item", + "name": "minecraft:bread", + "weight": 60, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] }, { "entryName": "wool", @@ -33,7 +48,7 @@ "max": 3 } } - ] + ] }, { "entryName": "torch", @@ -48,7 +63,7 @@ "max": 5 } } - ] + ] }, { "entryName": "leather", @@ -63,7 +78,7 @@ "max": 3 } } - ] + ] }, { "entryName": "rabbit_hide", @@ -78,7 +93,7 @@ "max": 3 } } - ] + ] }, { "entryName": "gold_nugget", @@ -93,7 +108,7 @@ "max": 3 } } - ] + ] }, { "entryName": "iron_ingot", @@ -108,7 +123,7 @@ "max": 5 } } - ] + ] }, { "entryName": "arrow", @@ -123,7 +138,7 @@ "max": 10 } } - ] + ] }, { "entryName": "bone", @@ -138,8 +153,8 @@ "max": 3 } } - ] - }, + ] + }, { "entryName": "spider_eye", "type": "item", @@ -153,13 +168,13 @@ "max": 3 } } - ] + ] }, { "entryName": "rotten_flesh", "type": "item", "name": "minecraft:rotten_flesh", - "weight": 50 + "weight": 50 }, { "entryName": "string", @@ -174,9 +189,39 @@ "max": 3 } } - ] - } + ] + }, + { + "entryName": "clay_ball", + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "entryName": "brick", + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + } ] } ] -} \ No newline at end of file +} diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json index ecaa468b2..936d0df3e 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json @@ -13,19 +13,19 @@ "conditions": [ { "condition": "random_chance", - "chance": 0.10 + "chance": 0.08 } ] }, { "entryName": "miners_friend", "type": "item", - "name": "treasure2:minders_friend", + "name": "treasure2:miners_friend", "weight": 10, "conditions": [ { "condition": "random_chance", - "chance": 0.15 + "chance": 0.12 } ] }, @@ -37,7 +37,7 @@ "conditions": [ { "condition": "random_chance", - "chance": 0.25 + "chance": 0.20 } ], "functions": [ @@ -71,7 +71,7 @@ "conditions": [ { "condition": "random_chance", - "chance": 0.2 + "chance": 0.18 } ], "functions": [ @@ -106,7 +106,7 @@ "conditions": [ { "condition": "random_chance", - "chance": 0.15 + "chance": 0.12 } ] } diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 785198637..30549ae76 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "treasure2", "name": "Treasure2!", "description": "", - "version": "1.13.1", + "version": "1.14.0", "mcversion": "1.12.2", "url": "", "updateUrl": "", From 7f6f271f330681f06023a582b46e05ee6cae4a7e Mon Sep 17 00:00:00 2001 From: gottsch Date: Tue, 8 Dec 2020 07:20:23 -0500 Subject: [PATCH 12/20] cleanup --- .../chest/GoldSkullChestGenerator.java | 10 ---------- .../generator/chest/RareChestGenerator.java | 14 -------------- .../generator/chest/ScarceChestGenerator.java | 17 ----------------- .../generator/chest/SkullChestGenerator.java | 10 ---------- .../chest/UncommonChestGenerator.java | 18 ------------------ .../generator/chest/WitherChestGenerator.java | 10 ---------- 6 files changed, 79 deletions(-) diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java index 28adcecd9..103375aef 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java @@ -51,16 +51,6 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar * @param chestRarity * @return */ -// @Override -// public LootTable selectLootTable(Random random, final Rarity chestRarity) { -// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.GOLD_SKULL_CHEST); -// } -// -// @Override -// public LootTable selectLootTable(Supplier factory, final Rarity rarity) { -// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.GOLD_SKULL_CHEST); -// } - @Override public Optional selectLootTable2(Random random, final Rarity chestRarity) { return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.GOLD_SKULL_CHEST)); diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java index ed6921b46..aefdc0e70 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java @@ -44,20 +44,6 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar tileEntity.setGenerationContext(generationContext); } -// @Override -// public List buildLootTableList(final Rarity chestRarity) { -// List tables = new ArrayList<>(); -// Map> mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.SCARCE); -// for(Entry> n : mapOfLootTables.entrySet()) { -// tables.addAll(n.getValue()); -// } -// mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.RARE); -// for(Entry> n : mapOfLootTables.entrySet()) { -// tables.addAll(n.getValue()); -// } -// return tables; -// } - @Override public List buildLootTableList2(final Rarity chestRarity) { // get all loot tables by column key diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java index f724b588f..08bded4a7 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java @@ -47,23 +47,6 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar /** * */ -// @Override -// public List buildLootTableList(final Rarity chestRarity) { -// // get all loot tables by column key -// List tables = new ArrayList<>(); -// Map> mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.UNCOMMON); -// // convert to a single list -// for(Entry> n : mapOfLootTables.entrySet()) { -// tables.addAll(n.getValue()); -// } -// mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.SCARCE); -// // convert to a single list -// for(Entry> n : mapOfLootTables.entrySet()) { -// tables.addAll(n.getValue()); -// } -// return tables; -// } - @Override public List buildLootTableList2(final Rarity chestRarity) { // get all loot tables by column key diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java index 5f18f0c57..30aab4659 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java @@ -51,16 +51,6 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar * @param chestRarity * @return */ -// @Override -// public LootTable selectLootTable(Random random, final Rarity chestRarity) { -// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.SKULL_CHEST); -// } -// -// @Override -// public LootTable selectLootTable(Supplier factory, final Rarity rarity) { -// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.SKULL_CHEST); -// } - @Override public Optional selectLootTable2(Random random, final Rarity chestRarity) { return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.SKULL_CHEST)); diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java index aabd750b4..a7b2d2be6 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java @@ -44,24 +44,6 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar /** * */ -// @Override -// public List buildLootTableList(final Rarity chestRarity) { -// List tables = new ArrayList<>(); -// -// // get all loot tables by column key -// Map> mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.COMMON); -// // convert to a single list -// for(Entry> n : mapOfLootTables.entrySet()) { -// tables.addAll(n.getValue()); -// } -// -// mapOfLootTables = Treasure.LOOT_TABLES.getChestLootTablesTable().column(Rarity.UNCOMMON); -// for(Entry> n : mapOfLootTables.entrySet()) { -// tables.addAll(n.getValue()); -// } -// return tables; -// } - @Override public List buildLootTableList2(final Rarity chestRarity) { // get all loot tables by column key diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java index 398b77fc3..5a06fe6e4 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java @@ -55,16 +55,6 @@ public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rar * @param chestRarity * @return */ -// @Override -// public LootTable selectLootTable(Random random, final Rarity chestRarity) { -// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.WITHER_CHEST); -// } -// -// @Override -// public LootTable selectLootTable(Supplier factory, final Rarity rarity) { -// return Treasure.LOOT_TABLES.getSpecialLootTable(SpecialLootTables.WITHER_CHEST); -// } - @Override public Optional selectLootTable2(Random random, final Rarity chestRarity) { return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.WITHER_CHEST)); From dd6aff27b0169861c44f3191540252b6a028c2c3 Mon Sep 17 00:00:00 2001 From: gottsch Date: Thu, 10 Dec 2020 13:13:47 -0500 Subject: [PATCH 13/20] adding new chests --- .../treasure2/block/TreasureBlocks.java | 135 +++++++------- .../treasure2/config/TreasureConfig.java | 50 ++--- .../treasure2/proxy/ClientProxy.java | 79 ++++---- .../tileentity/CardboardBoxTileEntity.java | 175 ++++++++++++++++++ .../CrystalSkullChestTileEntity.java | 28 +++ .../tileentity/MilkCrateTileEntity.java | 20 ++ 6 files changed, 365 insertions(+), 122 deletions(-) create mode 100644 src/main/java/com/someguyssoftware/treasure2/tileentity/CardboardBoxTileEntity.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/tileentity/CrystalSkullChestTileEntity.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/tileentity/MilkCrateTileEntity.java diff --git a/src/main/java/com/someguyssoftware/treasure2/block/TreasureBlocks.java b/src/main/java/com/someguyssoftware/treasure2/block/TreasureBlocks.java index ed2012e41..f18a50931 100644 --- a/src/main/java/com/someguyssoftware/treasure2/block/TreasureBlocks.java +++ b/src/main/java/com/someguyssoftware/treasure2/block/TreasureBlocks.java @@ -13,7 +13,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; -import com.someguyssoftware.gottschcore.block.ModBlock; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.chest.TreasureChestTypes; import com.someguyssoftware.treasure2.client.gui.GuiHandler; @@ -24,15 +23,18 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.MimicChestItemBlock; import com.someguyssoftware.treasure2.item.TreasureChestItemBlock; +import com.someguyssoftware.treasure2.tileentity.CardboardBoxTileEntity; import com.someguyssoftware.treasure2.tileentity.CauldronChestTileEntity; import com.someguyssoftware.treasure2.tileentity.CompressorChestTileEntity; import com.someguyssoftware.treasure2.tileentity.CrateChestTileEntity; +import com.someguyssoftware.treasure2.tileentity.CrystalSkullChestTileEntity; import com.someguyssoftware.treasure2.tileentity.DreadPirateChestTileEntity; import com.someguyssoftware.treasure2.tileentity.GoldSkullChestTileEntity; import com.someguyssoftware.treasure2.tileentity.GoldStrongboxTileEntity; import com.someguyssoftware.treasure2.tileentity.GravestoneProximitySpawnerTileEntity; import com.someguyssoftware.treasure2.tileentity.IronStrongboxTileEntity; import com.someguyssoftware.treasure2.tileentity.IronboundChestTileEntity; +import com.someguyssoftware.treasure2.tileentity.MilkCrateTileEntity; import com.someguyssoftware.treasure2.tileentity.MistEmitterTileEntity; import com.someguyssoftware.treasure2.tileentity.MoldyCrateChestTileEntity; import com.someguyssoftware.treasure2.tileentity.PirateChestTileEntity; @@ -77,9 +79,12 @@ public class TreasureBlocks { public static final Block WITHER_CHEST_TOP; public static final Block SKULL_CHEST; public static final Block GOLD_SKULL_CHEST; + public static final Block CRYSTAL_SKULL_CHEST; public static final Block CAULDRON_CHEST; public static final Block SPIDER_CHEST; public static final Block VIKING_CHEST; + public static final Block CARDBOARD_BOX; + public static final Block MILK_CRATE; // mimic chests public static final Block WOOD_MIMIC; @@ -96,7 +101,7 @@ public class TreasureBlocks { // gravestone holder public static List gravestones; - + // gravestone spawner holder public static List gravestoneSpawners; @@ -124,12 +129,12 @@ public class TreasureBlocks { public static final Block GRAVESTONE3_OBSIDIAN; public static final Block SKULL_CROSSBONES; public static final Block SKELETON; - + // gravestone spawners public static final Block GRAVESTONE1_SPAWNER_STONE; public static final Block GRAVESTONE2_SPAWNER_COBBLESTONE; public static final Block GRAVESTONE3_SPAWNER_OBSIDIAN; - + // wells public static final Block WISHING_WELL_BLOCK; public static final Block DESERT_WISHING_WELL_BLOCK; @@ -156,7 +161,7 @@ public class TreasureBlocks { public static final Block FALLING_SAND; public static final Block FALLING_RED_SAND; public static final Block BLACKSTONE; - + // treasures: paintings public static final AbstractPaintingBlock PAINTING_BLOCKS_BRICKS; public static final AbstractPaintingBlock PAINTING_BLOCKS_COBBLESTONE; @@ -183,18 +188,18 @@ public class TreasureBlocks { IRONBOUND_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.IRONBOUND_CHEST_ID, IronboundChestTileEntity.class, TreasureChestTypes.STANDARD, Rarity.UNCOMMON).setBounds(stdChestBounds) - .setHardness(3.0F); + .setHardness(3.0F); PIRATE_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.PIRATE_CHEST_ID, PirateChestTileEntity.class, TreasureChestTypes.STANDARD, Rarity.SCARCE).setBounds(stdChestBounds) - .setHardness(3.0F); + .setHardness(3.0F); CRATE_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.CRATE_CHEST_ID, CrateChestTileEntity.class, TreasureChestTypes.CRATE, Rarity.UNCOMMON).setBounds(stdChestBounds).setHardness(2.5F); MOLDY_CRATE_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.MOLDY_CRATE_CHEST_ID, MoldyCrateChestTileEntity.class, TreasureChestTypes.CRATE, Rarity.COMMON).setBounds(stdChestBounds) - .setHardness(2.0F); + .setHardness(2.0F); // safe chest bounds AxisAlignedBB[] safeBounds = new AxisAlignedBB[4]; @@ -215,15 +220,15 @@ public class TreasureBlocks { IRON_STRONGBOX = new TreasureChestBlock(Treasure.MODID, TreasureConfig.IRON_STRONGBOX_ID, IronStrongboxTileEntity.class, TreasureChestTypes.STRONGBOX, Rarity.SCARCE) - .setChestGuiID(GuiHandler.STRONGBOX_CHEST_GUIID).setBounds(strongboxBounds).setHardness(4.0F); + .setChestGuiID(GuiHandler.STRONGBOX_CHEST_GUIID).setBounds(strongboxBounds).setHardness(4.0F); GOLD_STRONGBOX = new TreasureChestBlock(Treasure.MODID, TreasureConfig.GOLD_STRONGBOX_ID, GoldStrongboxTileEntity.class, TreasureChestTypes.STRONGBOX, Rarity.RARE) - .setChestGuiID(GuiHandler.STRONGBOX_CHEST_GUIID).setBounds(strongboxBounds).setHardness(4.0F); + .setChestGuiID(GuiHandler.STRONGBOX_CHEST_GUIID).setBounds(strongboxBounds).setHardness(4.0F); DREAD_PIRATE_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.DREAD_PIRATE_CHEST_ID, DreadPirateChestTileEntity.class, TreasureChestTypes.STANDARD, Rarity.EPIC).setBounds(stdChestBounds) - .setHardness(4.0F); + .setHardness(4.0F); AxisAlignedBB compressorBB = new AxisAlignedBB(0.28125D, 0.0D, 0.28125D, 0.71875D, 0.4375D, 0.71875D); AxisAlignedBB[] compressorChestBounds = new AxisAlignedBB[4]; @@ -234,8 +239,8 @@ public class TreasureBlocks { COMPRESSOR_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.COMPRESSOR_CHEST_ID, CompressorChestTileEntity.class, TreasureChestTypes.COMPRESSOR, Rarity.EPIC) - .setChestGuiID(GuiHandler.COMPRESSOR_CHEST_GUIID).setBounds(compressorChestBounds) - .setHardness(3.0F); + .setChestGuiID(GuiHandler.COMPRESSOR_CHEST_GUIID).setBounds(compressorChestBounds) + .setHardness(3.0F); AxisAlignedBB witherBounds = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 1.6563D, 0.9375D); // .875 @@ -247,7 +252,7 @@ public class TreasureBlocks { WITHER_CHEST = new WitherChestBlock(Treasure.MODID, TreasureConfig.WITHER_CHEST_ID, WitherChestTileEntity.class, TreasureChestTypes.ARMOIRE, Rarity.SCARCE).setChestGuiID(GuiHandler.WITHER_CHEST_GUIID) - .setBounds(witherChestBounds).setHardness(2.5F); + .setBounds(witherChestBounds).setHardness(2.5F); WITHER_CHEST_TOP = new WitherChestTopBlock(Treasure.MODID, TreasureConfig.WITHER_CHEST_TOP_ID) .setHardness(2.5F); @@ -261,24 +266,20 @@ public class TreasureBlocks { SKULL_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.SKULL_CHEST_ID, SkullChestTileEntity.class, TreasureChestTypes.SKULL, Rarity.SCARCE).setChestGuiID(GuiHandler.SKULL_CHEST_GUIID) - .setBounds(skullChestBounds).setHardness(3.0F); + .setBounds(skullChestBounds).setHardness(3.0F); GOLD_SKULL_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.GOLD_SKULL_CHEST_ID, GoldSkullChestTileEntity.class, TreasureChestTypes.SKULL, Rarity.RARE) - .setChestGuiID(GuiHandler.SKULL_CHEST_GUIID).setBounds(skullChestBounds).setHardness(3.0F); + .setChestGuiID(GuiHandler.SKULL_CHEST_GUIID).setBounds(skullChestBounds).setHardness(3.0F); + + CRYSTAL_SKULL_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.CRYSTAL_SKULL_CHEST_ID, + CrystalSkullChestTileEntity.class, TreasureChestTypes.SKULL, Rarity.EPIC) + .setChestGuiID(GuiHandler.SKULL_CHEST_GUIID).setBounds(skullChestBounds).setHardness(3.0F); CAULDRON_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.CAULDRON_CHEST_ID, Material.IRON, CauldronChestTileEntity.class, TreasureChestTypes.TOP_SPLIT, Rarity.EPIC) - .setChestGuiID(GuiHandler.STANDARD_CHEST_GUIID).setHardness(3.0F); + .setChestGuiID(GuiHandler.STANDARD_CHEST_GUIID).setHardness(3.0F); -// WHALE_BONE_PIRATE_CHEST = new TreasureChestBlock( -// Treasure.MODID, -// TreasureConfig.WHALE_BONE_PIRATE_CHEST_ID, -// WhaleBonePirateChestTileEntity.class, -// TreasureChestTypes.STANDARD, -// Rarity.EPIC) -// .setBounds(stdChestBounds) -// .setHardness(4.0F); AxisAlignedBB molluscBB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.375D, 0.9375D); AxisAlignedBB[] molluscChestBounds = new AxisAlignedBB[4]; @@ -287,25 +288,6 @@ public class TreasureBlocks { molluscChestBounds[2] = molluscBB; // N molluscChestBounds[3] = molluscBB; // E -// OYSTER_CHEST = new TreasureChestBlock( -// Treasure.MODID, -// TreasureConfig.OYSTER_CHEST_ID, -// OysterChestTileEntity.class, -// TreasureChestTypes.LOW_RISE, -// Rarity.EPIC) -// .setChestGuiID(GuiHandler.MOLLUSCS_CHEST_GUIID) -// .setBounds(molluscChestBounds) -// .setHardness(3.0F); - -// CLAM_CHEST = new TreasureChestBlock( -// Treasure.MODID, -// TreasureConfig.CLAM_CHEST_ID, -// ClamChestTileEntity.class, -// TreasureChestTypes.LOW_RISE, -// Rarity.RARE) -// .setChestGuiID(GuiHandler.MOLLUSCS_CHEST_GUIID) -// .setBounds(molluscChestBounds) -// .setHardness(3.0F); SPIDER_CHEST = new TreasureChestBlock(Treasure.MODID, TreasureConfig.SPIDER_CHEST_ID, SpiderChestTileEntity.class, TreasureChestTypes.SINGLE_STANDARD, Rarity.RARE).setHardness(3.0F); @@ -318,18 +300,36 @@ public class TreasureBlocks { new AxisAlignedBB(0, 0, 0.125, 1, 0.9375, 0.875), // N new AxisAlignedBB(0.125, 0, 0, 0.875, 0.9375, 1)} ).setHardness(3.0F); - + + CARDBOARD_BOX = new TreasureChestBlock(Treasure.MODID, TreasureConfig.CARDBOARD_BOX_ID, CardboardBoxTileEntity.class, + TreasureChestTypes.TOP_SPLIT, Rarity.COMMON).setBounds( + new AxisAlignedBB[] { + new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.9375D, 0.9375D), + new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.9375D, 0.9375D), + new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.9375D, 0.9375D), + new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.9375D, 0.9375D) + }).setHardness(2.5F); + + MILK_CRATE = new TreasureChestBlock(Treasure.MODID, TreasureConfig.MILK_CRATE_ID, MilkCrateTileEntity.class, + TreasureChestTypes.MILK_CRATE, Rarity.COMMON).setBounds( + new AxisAlignedBB[] { + new AxisAlignedBB(0.171875D, 0.0D, 0.171875D, 0.828125D, 0.640625D, 0.828125D), + new AxisAlignedBB(0.171875D, 0.0D, 0.171875D, 0.828125D, 0.640625D, 0.828125D), + new AxisAlignedBB(0.171875D, 0.0D, 0.171875D, 0.828125D, 0.640625D, 0.828125D), + new AxisAlignedBB(0.171875D, 0.0D, 0.171875D, 0.828125D, 0.640625D, 0.828125D) + }).setHardness(2.5F); + // map the chests by rarity chests = ArrayListMultimap.create(); // mimics WOOD_MIMIC = new MimicChestBlock(Treasure.MODID, TreasureConfig.WOOD_MIMIC_ID, WoodChestTileEntity.class, WoodMimicEntity.class, TreasureChestTypes.STANDARD, Rarity.COMMON).setBounds(stdChestBounds) - .setHardness(2.5F); + .setHardness(2.5F); PIRATE_MIMIC = new MimicChestBlock(Treasure.MODID, TreasureConfig.PIRATE_MIMIC_ID, PirateChestTileEntity.class, PirateMimicEntity.class, TreasureChestTypes.STANDARD, Rarity.SCARCE).setBounds(stdChestBounds) - .setHardness(2.5F); + .setHardness(2.5F); // gravestone bounds AxisAlignedBB[] gbs = new AxisAlignedBB[4]; @@ -353,7 +353,7 @@ public class TreasureBlocks { TreasureConfig.GRAVESTONE1_POLISHED_DIORITE_ID, Material.ROCK).setBounds(gbs); GRAVESTONE1_OBSIDIAN = new GravestoneSpawnerBlock(Treasure.MODID, TreasureConfig.GRAVESTONE1_OBSIDIAN_ID, Material.ROCK).setBounds(gbs); - + AxisAlignedBB[] gbs2 = new AxisAlignedBB[4]; gbs2[0] = new AxisAlignedBB(0.125D, 0.0D, 0.375D, 0.875D, 1.375D, 0.675D); // S gbs2[1] = new AxisAlignedBB(0.375D, 0.0D, 0.125D, 0.675D, 1.375D, 0.875D); // W @@ -398,7 +398,7 @@ public class TreasureBlocks { Material.ROCK).setBounds(gbs2); GRAVESTONE3_SPAWNER_OBSIDIAN = new GravestoneSpawnerBlock(Treasure.MODID, TreasureConfig.GRAVESTONE3_SPAWNER_OBSIDIAN_ID, Material.ROCK).setBounds(gbs2); - + // other SKULL_CROSSBONES = new SkullAndBonesBlock(Treasure.MODID, TreasureConfig.SKULL_CROSSBONES_ID, Material.ROCK); @@ -454,7 +454,7 @@ public class TreasureBlocks { FALLING_SAND = new FallingSandBlock(Treasure.MODID, TreasureConfig.FALLING_SAND_ID); FALLING_RED_SAND = new FallingRedSandBlock(Treasure.MODID, TreasureConfig.FALLING_RED_SAND_ID); BLACKSTONE = new BlackstoneBlock(Treasure.MODID, TreasureConfig.BLACKSTONE_ID); - + // treasures: paintings AxisAlignedBB[] pbs = new AxisAlignedBB[4]; pbs[0] = new AxisAlignedBB(0D, 0D, 0D, 1D, 1D, 0.0625D); // S @@ -503,10 +503,12 @@ public static void registerBlocks(final RegistryEvent.Register event) { final Block[] blocks = { WOOD_CHEST, CRATE_CHEST, MOLDY_CRATE_CHEST, IRONBOUND_CHEST, PIRATE_CHEST, IRON_STRONGBOX, GOLD_STRONGBOX, SAFE, DREAD_PIRATE_CHEST, -// WHALE_BONE_PIRATE_CHEST, + // WHALE_BONE_PIRATE_CHEST, COMPRESSOR_CHEST, SPIDER_CHEST, VIKING_CHEST, + CARDBOARD_BOX, + MILK_CRATE, WOOD_MIMIC, PIRATE_MIMIC, GRAVESTONE1_STONE, @@ -536,19 +538,20 @@ public static void registerBlocks(final RegistryEvent.Register event) { FALLING_SAND, FALLING_RED_SAND, BLACKSTONE - }; - + }; + registry.registerAll(blocks); // register speciality chests separately (so they aren't in the rarity map) registry.register(WITHER_CHEST); registry.register(SKULL_CHEST); registry.register(GOLD_SKULL_CHEST); + registry.register(CRYSTAL_SKULL_CHEST); registry.register(CAULDRON_CHEST); registry.register(PROXIMITY_SPAWNER); // mapping -// registry.register(OYSTER_CHEST); -// registry.register(CLAM_CHEST); + // registry.register(OYSTER_CHEST); + // registry.register(CLAM_CHEST); // map the block by rarity for (Block block : blocks) { @@ -572,12 +575,17 @@ public static void registerItemBlocks(final RegistryEvent.Register event) new TreasureChestItemBlock(PIRATE_CHEST), new TreasureChestItemBlock(IRON_STRONGBOX), new TreasureChestItemBlock(GOLD_STRONGBOX), new TreasureChestItemBlock(SAFE), new TreasureChestItemBlock(DREAD_PIRATE_CHEST), -// new TreasureChestItemBlock(WHALE_BONE_PIRATE_CHEST), + // new TreasureChestItemBlock(WHALE_BONE_PIRATE_CHEST), new TreasureChestItemBlock(COMPRESSOR_CHEST), new TreasureChestItemBlock(WITHER_CHEST), - new TreasureChestItemBlock(SKULL_CHEST), new TreasureChestItemBlock(GOLD_SKULL_CHEST), + new TreasureChestItemBlock(SKULL_CHEST), + new TreasureChestItemBlock(GOLD_SKULL_CHEST), + new TreasureChestItemBlock(CRYSTAL_SKULL_CHEST), new TreasureChestItemBlock(CAULDRON_CHEST), new TreasureChestItemBlock(SPIDER_CHEST), new TreasureChestItemBlock(VIKING_CHEST), + new TreasureChestItemBlock(CARDBOARD_BOX), + new TreasureChestItemBlock(MILK_CRATE), + new MimicChestItemBlock(WOOD_MIMIC), new MimicChestItemBlock(PIRATE_MIMIC), @@ -641,23 +649,26 @@ public static void registerItemBlocks(final RegistryEvent.Register event) new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.SKULL_CHEST_TE_ID)); GameRegistry.registerTileEntity(GoldSkullChestTileEntity.class, new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.GOLD_SKULL_CHEST_TE_ID)); + GameRegistry.registerTileEntity(CrystalSkullChestTileEntity.class, + new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.CRYSTAL_SKULL_CHEST_TE_ID)); GameRegistry.registerTileEntity(CauldronChestTileEntity.class, new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.CAULDRON_CHEST_TE_ID)); GameRegistry.registerTileEntity(SpiderChestTileEntity.class, new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.SPIDER_CHEST_TE_ID)); GameRegistry.registerTileEntity(VikingChestTileEntity.class, new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.VIKING_CHEST_TE_ID)); - + + GameRegistry.registerTileEntity(CardboardBoxTileEntity.class, + new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.CARDBOARD_BOX_TE_ID)); + GameRegistry.registerTileEntity(MilkCrateTileEntity.class, + new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.MILK_CRATE_TE_ID)); + GameRegistry.registerTileEntity(ProximitySpawnerTileEntity.class, new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.PROXIMITY_SPAWNER_TE_ID)); GameRegistry.registerTileEntity(GravestoneProximitySpawnerTileEntity.class, new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.GRAVESTONE_PROXIMITY_SPAWNER_TE_ID)); GameRegistry.registerTileEntity(MistEmitterTileEntity.class, new ResourceLocation(Treasure.MODID + ":" + TreasureConfig.GRAVESTONE_TE_ID)); -// GameRegistry.registerTileEntity(WhaleBonePirateChestTileEntity.class, new ResourceLocation(Treasure.MODID+":"+TreasureConfig.WHALE_BONE_PIRATE_CHEST_TE_ID)); -// GameRegistry.registerTileEntity(OysterChestTileEntity.class, new ResourceLocation(Treasure.MODID+":"+TreasureConfig.OYSTER_CHEST_TE_ID)); -// GameRegistry.registerTileEntity(ClamChestTileEntity.class, new ResourceLocation(Treasure.MODID+":"+TreasureConfig.CLAM_CHEST_TE_ID)); - } } } diff --git a/src/main/java/com/someguyssoftware/treasure2/config/TreasureConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/TreasureConfig.java index e8b6c6437..6ec7305a7 100644 --- a/src/main/java/com/someguyssoftware/treasure2/config/TreasureConfig.java +++ b/src/main/java/com/someguyssoftware/treasure2/config/TreasureConfig.java @@ -69,19 +69,22 @@ public class TreasureConfig implements IConfig, ILoggerConfig { @Ignore public static final String WITHER_CHEST_TOP_ID = "wither_chest_top"; @Ignore public static final String SKULL_CHEST_ID = "skull_chest"; @Ignore public static final String GOLD_SKULL_CHEST_ID = "gold_skull_chest"; + @Ignore public static final String CRYSTAL_SKULL_CHEST_ID = "crystal_skull_chest"; @Ignore public static final String CAULDRON_CHEST_ID = "cauldron_chest"; @Ignore public static final String SPIDER_CHEST_ID = "spider_chest"; @Ignore public static final String VIKING_CHEST_ID = "viking_chest"; - + @Ignore public static final String CARDBOARD_BOX_ID = "cardboard_box"; + @Ignore public static final String MILK_CRATE_ID = "milk_crate"; + // mimics @Ignore public static final String WOOD_MIMIC_ID = "wood_mimic"; @Ignore public static final String PIRATE_MIMIC_ID = "pirate_mimic"; // locks @Ignore public static final String WOOD_LOCK_ID = "wood_lock"; - @Ignore public static final String STONE_LOCK_ID = "stone_lock"; - @Ignore public static final String EMBER_LOCK_ID = "ember_lock"; - @Ignore public static final String LEAF_LOCK_ID = "leaf_lock"; + @Ignore public static final String STONE_LOCK_ID = "stone_lock"; + @Ignore public static final String EMBER_LOCK_ID = "ember_lock"; + @Ignore public static final String LEAF_LOCK_ID = "leaf_lock"; @Ignore public static final String IRON_LOCK_ID = "iron_lock"; @Ignore public static final String GOLD_LOCK_ID = "gold_lock"; @Ignore public static final String DIAMOND_LOCK_ID = "diamond_lock"; @@ -94,10 +97,10 @@ public class TreasureConfig implements IConfig, ILoggerConfig { // keys @Ignore public static final String WOOD_KEY_ID = "wood_key"; @Ignore public static final String STONE_KEY_ID = "stone_key"; - @Ignore public static final String EMBER_KEY_ID = "ember_key"; - @Ignore public static final String LEAF_KEY_ID = "leaf_key"; - @Ignore public static final String LIGHTNING_KEY_ID = "lightning_key"; - + @Ignore public static final String EMBER_KEY_ID = "ember_key"; + @Ignore public static final String LEAF_KEY_ID = "leaf_key"; + @Ignore public static final String LIGHTNING_KEY_ID = "lightning_key"; + @Ignore public static final String GOLD_KEY_ID = "gold_key"; @Ignore public static final String IRON_KEY_ID = "iron_key"; @Ignore public static final String DIAMOND_KEY_ID = "diamond_key"; @@ -118,7 +121,7 @@ public class TreasureConfig implements IConfig, ILoggerConfig { @Ignore public static final String LUCKY_POUCH_ID = "lucky_pouch"; @Ignore public static final String APPRENTICES_POUCH_ID = "apprentices_pouch"; @Ignore public static final String MASTERS_POUCH_ID = "masters_pouch"; - + @Ignore public static final String GOLD_COIN_ID = "gold_coin"; @Ignore public static final String SILVER_COIN_ID = "silver_coin"; @Ignore public static final String CHARMED_SILVER_COIN_ID = "charmed_silver_coin"; @@ -127,7 +130,7 @@ public class TreasureConfig implements IConfig, ILoggerConfig { @Ignore public static final String CHARMED_SAPPHIRE_ID ="charmed_sapphire"; @Ignore public static final String ANGEL_BLESSED_ID = "angel_blessed"; @Ignore public static final String MINERS_FRIEND_ID = "miners_friend"; - + @Ignore public static final String WHITE_PEARL_ID = "white_pearl"; @Ignore public static final String BLACK_PEARL_ID = "black_pearl"; @@ -167,7 +170,7 @@ public class TreasureConfig implements IConfig, ILoggerConfig { @Ignore public static final String GRAVESTONE1_SPAWNER_STONE_ID = "gravestone1_spawner_stone"; @Ignore public static final String GRAVESTONE2_SPAWNER_COBBLESTONE_ID = "gravestone2_spawner_cobblestone"; @Ignore public static final String GRAVESTONE3_SPAWNER_OBSIDIAN_ID = "gravestone3_spawner_obsidian"; - + @Ignore public static final String SKULL_CROSSBONES_ID = "skull_and_crossbones"; @Ignore public static final String SKELETON_ID = "skeleton"; @@ -207,7 +210,7 @@ public class TreasureConfig implements IConfig, ILoggerConfig { @Ignore public static final String FALLING_GRASS_ID = "falling_grass"; @Ignore public static final String FALLING_SAND_ID = "falling_sand"; @Ignore public static final String FALLING_RED_SAND_ID = "falling_red_sand"; - + @Ignore public static final String WITHER_PLANKS_ID = "wither_planks"; @Ignore public static final String SAPPHIRE_ORE_ID = "sapphire_ore"; @@ -234,11 +237,14 @@ public class TreasureConfig implements IConfig, ILoggerConfig { @Ignore public static final String WITHER_CHEST_TE_ID = "wither_chest_tile_entity"; @Ignore public static final String SKULL_CHEST_TE_ID = "skull_chest_tile_entity"; @Ignore public static final String GOLD_SKULL_CHEST_TE_ID = "gold_skull_chest_tile_entity"; + @Ignore public static final String CRYSTAL_SKULL_CHEST_TE_ID = "crystal_skull_chest_tile_entity"; @Ignore public static final String CAULDRON_CHEST_TE_ID = "cauldron_chest_tile_entity"; @Ignore public static final String OYSTER_CHEST_TE_ID = "oyster_chest_tile_entity"; @Ignore public static final String CLAM_CHEST_TE_ID = "clam_chest_tile_entity"; @Ignore public static final String SPIDER_CHEST_TE_ID = "spider_chest_tile_entity"; @Ignore public static final String VIKING_CHEST_TE_ID = "viking_chest_tile_entity"; + @Ignore public static final String CARDBOARD_BOX_TE_ID = "cardboard_box_tile_entity"; + @Ignore public static final String MILK_CRATE_TE_ID = "milk_crate_tile_entity"; @Ignore public static final String PROXIMITY_SPAWNER_TE_ID = "proximity_spawner_tile_entity"; @Ignore public static final String GRAVESTONE_TE_ID = "gravestone_tile_entity"; @Ignore public static final String GRAVESTONE_PROXIMITY_SPAWNER_TE_ID = "gravestone_proximity_spawner_tile_entity"; @@ -720,7 +726,7 @@ public static class Oases { public OasisConfig desertOasisProperties = new OasisConfig( true, 1000, 80, new String[] {"desert", "desert_hills", "desert_lakes", "badlands", - "badlands_plateau"}, + "badlands_plateau"}, new String[] {}, new String[] {"mesa", "dry"}, new String[] { }); @@ -844,8 +850,8 @@ public static class KeysAndLocks { @Name("06. Stone key max uses:") @RangeInt(min = 1, max = 32000) @RequiresMcRestart - public int stoneKeyMaxUses = 10; - + public int stoneKeyMaxUses = 10; + @Comment({ "The maximum uses for a given iron key." }) @Name("07. Iron key max. uses:") @RangeInt(min = 1, max = 32000) @@ -910,21 +916,21 @@ public static class KeysAndLocks { @Name("17. Wither key max. uses:") @RangeInt(min = 1, max = 32000) @RequiresMcRestart - public int witherKeyMaxUses = 5; - - @Comment({ "The maximum uses for a given ember key." }) + public int witherKeyMaxUses = 5; + + @Comment({ "The maximum uses for a given ember key." }) @Name("18. Ember key max uses:") @RangeInt(min = 1, max = 32000) @RequiresMcRestart public int emberKeyMaxUses = 15; - - @Comment({ "The maximum uses for a given leaf key." }) + + @Comment({ "The maximum uses for a given leaf key." }) @Name("19. Leaf key max uses:") @RangeInt(min = 1, max = 32000) @RequiresMcRestart public int leafKeyMaxUses = 15; - - @Comment({ "The maximum uses for a given lightning key." }) + + @Comment({ "The maximum uses for a given lightning key." }) @Name("20. Lightning key max uses:") @RangeInt(min = 1, max = 32000) @RequiresMcRestart diff --git a/src/main/java/com/someguyssoftware/treasure2/proxy/ClientProxy.java b/src/main/java/com/someguyssoftware/treasure2/proxy/ClientProxy.java index f015d861c..6c376e968 100644 --- a/src/main/java/com/someguyssoftware/treasure2/proxy/ClientProxy.java +++ b/src/main/java/com/someguyssoftware/treasure2/proxy/ClientProxy.java @@ -35,15 +35,18 @@ import com.someguyssoftware.treasure2.entity.monster.WoodMimicEntity; import com.someguyssoftware.treasure2.particle.MistTextureStitcher; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; +import com.someguyssoftware.treasure2.tileentity.CardboardBoxTileEntity; import com.someguyssoftware.treasure2.tileentity.CauldronChestTileEntity; import com.someguyssoftware.treasure2.tileentity.ClamChestTileEntity; import com.someguyssoftware.treasure2.tileentity.CompressorChestTileEntity; import com.someguyssoftware.treasure2.tileentity.CrateChestTileEntity; +import com.someguyssoftware.treasure2.tileentity.CrystalSkullChestTileEntity; import com.someguyssoftware.treasure2.tileentity.DreadPirateChestTileEntity; import com.someguyssoftware.treasure2.tileentity.GoldSkullChestTileEntity; import com.someguyssoftware.treasure2.tileentity.GoldStrongboxTileEntity; import com.someguyssoftware.treasure2.tileentity.IronStrongboxTileEntity; import com.someguyssoftware.treasure2.tileentity.IronboundChestTileEntity; +import com.someguyssoftware.treasure2.tileentity.MilkCrateTileEntity; import com.someguyssoftware.treasure2.tileentity.MoldyCrateChestTileEntity; import com.someguyssoftware.treasure2.tileentity.OysterChestTileEntity; import com.someguyssoftware.treasure2.tileentity.PirateChestTileEntity; @@ -76,13 +79,13 @@ */ @Mod.EventBusSubscriber(modid=Treasure.MODID, value = Side.CLIENT) public class ClientProxy { - + @SuppressWarnings("deprecation") @SubscribeEvent public static void registerRenderers(@SuppressWarnings("rawtypes") final RegistryEvent.Register event) { // register the texture stitcher, which is used to insert the mist image into the blocks texture sheet - MinecraftForge.EVENT_BUS.register(new MistTextureStitcher()); - + MinecraftForge.EVENT_BUS.register(new MistTextureStitcher()); + /* * register tile entity special renderers */ @@ -90,12 +93,12 @@ public static void registerRenderers(@SuppressWarnings("rawtypes") final Registr ClientRegistry.bindTileEntitySpecialRenderer( AbstractTreasureChestTileEntity.class, new TreasureChestTileEntityRenderer("standard-chest", new StandardChestModel())); - + // wood chest ClientRegistry.bindTileEntitySpecialRenderer( WoodChestTileEntity.class, new TreasureChestTileEntityRenderer("wood-chest", new StandardChestModel())); - + // crate chest ClientRegistry.bindTileEntitySpecialRenderer( CrateChestTileEntity.class, @@ -105,47 +108,42 @@ public static void registerRenderers(@SuppressWarnings("rawtypes") final Registr ClientRegistry.bindTileEntitySpecialRenderer( MoldyCrateChestTileEntity.class, new CrateChestTileEntityRenderer("crate-chest-moldy", new CrateChestModel())); - + // ironbound chest ClientRegistry.bindTileEntitySpecialRenderer( IronboundChestTileEntity.class, new TreasureChestTileEntityRenderer("ironbound-chest", new BandedChestModel())); - + // pirate chest ClientRegistry.bindTileEntitySpecialRenderer( PirateChestTileEntity.class, new TreasureChestTileEntityRenderer("pirate-chest", new StandardChestModel())); - + // iron strongbox ClientRegistry.bindTileEntitySpecialRenderer( IronStrongboxTileEntity.class, new StrongboxTileEntityRenderer("iron-strongbox", new StrongboxModel())); - + // gold strongbox ClientRegistry.bindTileEntitySpecialRenderer( GoldStrongboxTileEntity.class, new StrongboxTileEntityRenderer("gold-strongbox", new StrongboxModel())); - + // safe ClientRegistry.bindTileEntitySpecialRenderer( SafeTileEntity.class, new SafeTileEntityRenderer("safe", new SafeModel())); - + // dread pirate chest ClientRegistry.bindTileEntitySpecialRenderer( DreadPirateChestTileEntity.class, new TreasureChestTileEntityRenderer("dread-pirate-chest", new DreadPirateChestModel())); - - // whale bone pirate chest - uses same model as dread pirate -// ClientRegistry.bindTileEntitySpecialRenderer( -// WhaleBonePirateChestTileEntity.class, -// new TreasureChestTileEntityRenderer("whale-bone-pirate-chest", new DreadPirateChestModel())); - + // compressor chest ClientRegistry.bindTileEntitySpecialRenderer( CompressorChestTileEntity.class, new CompressorChestTileEntityRenderer("compressor-chest", new CompressorChestModel())); - + // wither chest ClientRegistry.bindTileEntitySpecialRenderer( WitherChestTileEntity.class, @@ -155,12 +153,17 @@ public static void registerRenderers(@SuppressWarnings("rawtypes") final Registr ClientRegistry.bindTileEntitySpecialRenderer( SkullChestTileEntity.class, new SkullChestTileEntityRenderer("skull-chest", new SkullChestModel())); - + // gold skull chest ClientRegistry.bindTileEntitySpecialRenderer( GoldSkullChestTileEntity.class, new SkullChestTileEntityRenderer("gold-skull-chest", new SkullChestModel())); - + + // crystal skull chest + ClientRegistry.bindTileEntitySpecialRenderer( + CrystalSkullChestTileEntity.class, + new SkullChestTileEntityRenderer("crystal-skull-chest", new SkullChestModel())); + // cauldron chest ClientRegistry.bindTileEntitySpecialRenderer( CauldronChestTileEntity.class, @@ -170,22 +173,22 @@ public static void registerRenderers(@SuppressWarnings("rawtypes") final Registr ClientRegistry.bindTileEntitySpecialRenderer( SpiderChestTileEntity.class, new TreasureChestTileEntityRenderer("spider-chest", new SpiderChestModel())); - + // viking chest ClientRegistry.bindTileEntitySpecialRenderer( VikingChestTileEntity.class, new TreasureChestTileEntityRenderer("viking-chest", new VikingChestModel())); - - // oyster chest -// ClientRegistry.bindTileEntitySpecialRenderer( -// OysterChestTileEntity.class, -// new MolluscChestTileEntityRenderer("oyster-chest", new OysterChestModel())); - - // clam chest -// ClientRegistry.bindTileEntitySpecialRenderer( -// ClamChestTileEntity.class, -// new MolluscChestTileEntityRenderer("clam-chest", new ClamChestModel())); - + + // cardboard box + ClientRegistry.bindTileEntitySpecialRenderer( + CardboardBoxTileEntity.class, + new CardboardBoxTileEntityRenderer("cardboard-box", new CardboardBoxModel())); + + // milk crate + ClientRegistry.bindTileEntitySpecialRenderer( + MilkCrateTileEntity.class, + new MilkCrateTileEntityRenderer("milk-crate", new MilkCrateModel())); + /* * register the entity render handlers */ @@ -200,14 +203,14 @@ public static void registerRenderers(@SuppressWarnings("rawtypes") final Registr Minecraft.getMinecraft().getRenderManager(), new MimicModel(), new ResourceLocation(Treasure.MODID + ":textures/entity/mob/pirate-mimic.png"))); - + RenderingRegistry.registerEntityRenderingHandler(BoundSoulEntity.class, new BoundSoulRenderer( Minecraft.getMinecraft().getRenderManager())); - -// RenderingRegistry.registerEntityRenderingHandler(Bound, IRenderFactory renderFactory) -// { -// INSTANCE.entityRenderers.put(entityClass, renderFactory); -// } + + // RenderingRegistry.registerEntityRenderingHandler(Bound, IRenderFactory renderFactory) + // { + // INSTANCE.entityRenderers.put(entityClass, renderFactory); + // } } } diff --git a/src/main/java/com/someguyssoftware/treasure2/tileentity/CardboardBoxTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/CardboardBoxTileEntity.java new file mode 100644 index 000000000..c17d448b0 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/tileentity/CardboardBoxTileEntity.java @@ -0,0 +1,175 @@ +package com.someguyssoftware.treasure2.tileentity; + +import com.someguyssoftware.gottschcore.world.WorldInfo; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.ContainerChest; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.text.translation.I18n; + +/** + * + * @author Mark Gottschling on Nov 29, 2020 + * + */ +public class CardboardBoxTileEntity extends AbstractTreasureChestTileEntity { + /** The angle of the latch last tick */ + public float prevInnerLidPos; + + public float innerLidAngle; + public float prevInnerLidAngle; + + public boolean isLidOpen = false; + public boolean isLidClosed = true; + public boolean isInnerLidOpen = false; + public boolean isInnerLidClosed = true; + + /** + * + * @param texture + */ + public CardboardBoxTileEntity() { + super(); + setCustomName(I18n.translateToLocal("display.cardboard_box.name")); + } + + /** + * Like the old updateEntity(), except more generic. + */ + @Override + public void update() { + int x = this.pos.getX(); + int y = this.pos.getY(); + int z = this.pos.getZ(); + ++this.ticksSinceSync; + + /* + * recalculating if the chest is in use by any players + */ + if (WorldInfo.isServerSide(getWorld()) && this.numPlayersUsing != 0 + && (this.ticksSinceSync + x + y + z) % 200 == 0) { + this.numPlayersUsing = 0; + + for (EntityPlayer entityplayer : this.world.getEntitiesWithinAABB(EntityPlayer.class, + new AxisAlignedBB((double) ((float) x - 5.0F), (double) ((float) y - 5.0F), + (double) ((float) z - 5.0F), (double) ((float) (x + 1) + 5.0F), + (double) ((float) (y + 1) + 5.0F), (double) ((float) (z + 1) + 5.0F)))) { + if (entityplayer.openContainer instanceof ContainerChest) { + IInventory iinventory = ((ContainerChest) entityplayer.openContainer).getLowerChestInventory(); + + if (iinventory == this) { + ++this.numPlayersUsing; + } + } + } + } + + // save the previous positions and angles of box components + this.prevLidAngle = this.lidAngle; + this.prevInnerLidAngle = this.innerLidAngle; + + // opening ie. players + if (this.numPlayersUsing > 0) { + // test the lid + if (this.lidAngle < 1.0F) { + isLidOpen = false; + this.lidAngle += 0.1F; + isLidClosed = false; + if (this.lidAngle >= 1.0F) { + this.lidAngle = 1.0F; + isLidOpen = true; + } + } else { + isLidOpen = true; + } + + if (isLidOpen) { + // play the opening chest sound the at the beginning of opening + if (isInnerLidClosed) { + double d1 = (double) x + 0.5D; + double d2 = (double) z + 0.5D; + this.world.playSound((EntityPlayer) null, d1, (double) y + 0.5D, d2, SoundEvents.BLOCK_CHEST_OPEN, + SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + // test the inner lid + if (this.innerLidAngle < 1.0F) { + isInnerLidOpen = false; + this.innerLidAngle += 0.1F; + isInnerLidClosed = false; + if (this.innerLidAngle >= 1.0F) { + this.innerLidAngle = 1.0F; + isInnerLidOpen = true; + } + } else { + isInnerLidOpen = true; + } + } + } + + // closing + else { + // test the inner lid + if (this.innerLidAngle > 0.0F) { + isInnerLidClosed = false; + this.innerLidAngle -= 0.1F; + isInnerLidOpen = false; + if (this.innerLidAngle <= 0.0F) { + this.innerLidAngle = 0.0F; + isInnerLidClosed = true; + } + } else { + isInnerLidClosed = true; + } + + // play the closing soud + if (isInnerLidClosed ) { + if (isLidOpen) { + double d3 = (double) x + 0.5D; + double d0 = (double) z + 0.5D; + this.world.playSound((EntityPlayer) null, d3, (double) y + 0.5D, d0, SoundEvents.BLOCK_CHEST_CLOSE, + SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + // test the outer lid + if (this.lidAngle > 0.0F) { + isLidClosed = false; + this.lidAngle -= 0.1F; + isLidOpen = false; + if (this.lidAngle <= 0.0F) { + this.lidAngle = 0.0F; + isLidClosed = true; + } + } else { + isLidClosed = true; + } + } + } + } + + public float getPrevInnerLidPos() { + return prevInnerLidPos; + } + + public void setPrevInnerLidPos(float innerLidPos) { + this.prevInnerLidPos = innerLidPos; + } + + public float getInnerLidAngle() { + return innerLidAngle; + } + + public void setInnerLidAngle(float innerLidAngle) { + this.innerLidAngle = innerLidAngle; + } + + public float getPrevInnerLidAngle() { + return prevInnerLidAngle; + } + + public void setPrevInnerLidAngle(float innerLidAngle) { + this.prevInnerLidAngle = innerLidAngle; + } +} \ No newline at end of file diff --git a/src/main/java/com/someguyssoftware/treasure2/tileentity/CrystalSkullChestTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/CrystalSkullChestTileEntity.java new file mode 100644 index 000000000..1823575d5 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/tileentity/CrystalSkullChestTileEntity.java @@ -0,0 +1,28 @@ +package com.someguyssoftware.treasure2.tileentity; + +import net.minecraft.util.text.translation.I18n; + +/** + * + * @author Mark Gottschling on Dec 9, 2020 + * + */ +public class CrystalSkullChestTileEntity extends AbstractTreasureChestTileEntity { + + /** + * + * @param texture + */ + public CrystalSkullChestTileEntity() { + super(); + setCustomName(I18n.translateToLocal("display.crystal_skull_chest.name")); + } + + /** + * @return the numberOfSlots + */ + @Override + public int getNumberOfSlots() { + return 9; + } +} \ No newline at end of file diff --git a/src/main/java/com/someguyssoftware/treasure2/tileentity/MilkCrateTileEntity.java b/src/main/java/com/someguyssoftware/treasure2/tileentity/MilkCrateTileEntity.java new file mode 100644 index 000000000..47c0951b7 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/tileentity/MilkCrateTileEntity.java @@ -0,0 +1,20 @@ +package com.someguyssoftware.treasure2.tileentity; + +import net.minecraft.util.text.translation.I18n; + +/** + * + * @author Mark Gottschling on Nov 30, 2020 + * + */ +public class MilkCrateTileEntity extends AbstractTreasureChestTileEntity { + + /** + * + * @param texture + */ + public MilkCrateTileEntity() { + super(); + setCustomName(I18n.translateToLocal("display.milk_crate.name")); + } +} \ No newline at end of file From 835397fc96d250b669de0272a8a0cbc5709cae5b Mon Sep 17 00:00:00 2001 From: gottsch Date: Thu, 10 Dec 2020 13:21:10 -0500 Subject: [PATCH 14/20] add all renderers, models --- .../client/model/CardboardBoxModel.java | 87 +++++++++++ .../client/model/MilkCrateModel.java | 102 +++++++++++++ .../CardboardBoxTileEntityRenderer.java | 64 ++++++++ .../CauldronChestTileEntityRenderer.java | 126 ++-------------- .../CompressorChestTileEntityRenderer.java | 142 ++---------------- .../ITreasureChestTileEntityRenderer.java | 119 +++++++++++++++ .../MilkCrateTileEntityRenderer.java | 41 +++++ .../tileentity/SafeTileEntityRenderer.java | 46 +----- .../SkullChestTileEntityRenderer.java | 35 +---- .../StrongboxTileEntityRenderer.java | 38 +---- .../TreasureChestTileEntityRenderer.java | 89 +++-------- .../treasure2/model/TreasureModels.java | 6 +- .../treasure2/proxy/ClientProxy.java | 4 + 13 files changed, 489 insertions(+), 410 deletions(-) create mode 100644 src/main/java/com/someguyssoftware/treasure2/client/model/CardboardBoxModel.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/client/model/MilkCrateModel.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CardboardBoxTileEntityRenderer.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/ITreasureChestTileEntityRenderer.java create mode 100644 src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/MilkCrateTileEntityRenderer.java diff --git a/src/main/java/com/someguyssoftware/treasure2/client/model/CardboardBoxModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/CardboardBoxModel.java new file mode 100644 index 000000000..fc2c452b9 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/client/model/CardboardBoxModel.java @@ -0,0 +1,87 @@ +package com.someguyssoftware.treasure2.client.model; + +import com.someguyssoftware.treasure2.tileentity.ITreasureChestTileEntity; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * + * @author Mark Gottschling on Nov 29, 2020 + * + */ +public class CardboardBoxModel extends ModelBase implements ITreasureChestModel { + private final ModelRenderer base; + private final ModelRenderer rightFlap; + private final ModelRenderer leftFlap; + private final ModelRenderer southFlap; + private final ModelRenderer northFlap; + + public CardboardBoxModel() { + textureWidth = 128; + textureHeight = 128; + + base = new ModelRenderer(this); + base.setRotationPoint(7.0F, 10.0F, -7.0F); + base.cubeList.add(new ModelBox(base, 0, 0, -14.0F, 0.0F, 0.0F, 14, 14, 14, 0.0F, false)); + + rightFlap = new ModelRenderer(this); + rightFlap.setRotationPoint(7.0F, 10.0F, 0.0F); + rightFlap.cubeList.add(new ModelBox(rightFlap, 28, 29, -7.0F, -1.0F, -7.0F, 7, 1, 14, 0.0F, false)); + + leftFlap = new ModelRenderer(this); + leftFlap.setRotationPoint(-7.0F, 10.0F, 0.0F); + leftFlap.cubeList.add(new ModelBox(leftFlap, 0, 28, 0.0F, -1.0F, -7.0F, 7, 1, 14, 0.0F, false)); + + southFlap = new ModelRenderer(this); + southFlap.setRotationPoint(0.0F, 10.0F, 7.0F); + southFlap.cubeList.add(new ModelBox(southFlap, 42, 7, -7.0F, -0.999F, -6.001F, 14, 1, 6, 0.0F, false)); + + northFlap = new ModelRenderer(this); + northFlap.setRotationPoint(0.0F, 10.0F, -7.0F); + northFlap.cubeList.add(new ModelBox(northFlap, 42, 0, -7.0F, -0.999F, 0.001F, 14, 1, 6, 0.0F, false)); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + base.render(f5); + rightFlap.render(f5); + leftFlap.render(f5); + southFlap.render(f5); + northFlap.render(f5); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } + + @Override + public void renderAll(ITreasureChestTileEntity te) { + float angle = 0.0625F; + + // set the angles of the latch to same as the lib + rightFlap.rotateAngleZ = -leftFlap.rotateAngleZ; + southFlap.rotateAngleX = -northFlap.rotateAngleX; + + base.render(angle); + rightFlap.render(angle); + leftFlap.render(angle); + southFlap.render(angle); + northFlap.render(angle); + } + + @Override + public ModelRenderer getLid() { + return leftFlap; + } + + public ModelRenderer getInnerLid() { + return northFlap; + } +} \ No newline at end of file diff --git a/src/main/java/com/someguyssoftware/treasure2/client/model/MilkCrateModel.java b/src/main/java/com/someguyssoftware/treasure2/client/model/MilkCrateModel.java new file mode 100644 index 000000000..24146d181 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/client/model/MilkCrateModel.java @@ -0,0 +1,102 @@ +package com.someguyssoftware.treasure2.client.model; + +import com.someguyssoftware.treasure2.tileentity.ITreasureChestTileEntity; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class MilkCrateModel extends ModelBase implements ITreasureChestModel { + private final ModelRenderer northFace; + private final ModelRenderer lid; + private final ModelRenderer padBottom; + private final ModelRenderer southFace; + private final ModelRenderer eastFace; + private final ModelRenderer westFace; + private final ModelRenderer bottomFace; + + public MilkCrateModel() { + textureWidth = 128; + textureHeight = 128; + + northFace = new ModelRenderer(this); + northFace.setRotationPoint(0.0F, 14.0F, 7.0F); + northFace.setTextureOffset(41, 8).addBox(-7.0F, 7.0F, -14.0F, 14, 3, 1, false); + northFace.setTextureOffset(42, 5).addBox(-7.0F, 3.0F, -14.0F, 14, 3, 1, false); + northFace.setTextureOffset(42, 1).addBox(-7.0F, -0.9F, -14.0F, 14, 3, 1, false); + northFace.setTextureOffset(0, 0).addBox(5.1F, -1.0F, -14.1F, 2, 11, 2, false); + northFace.setTextureOffset(0, 0).addBox(-7.1F, -1.0F, -14.1F, 2, 11, 2, false); + + lid = new ModelRenderer(this); + lid.setRotationPoint(0.0F, 13.0F, 7.0F); + lid.setTextureOffset(0, 0).addBox(-7.0F, -2.0F, -14.0F, 14, 2, 14, false); + lid.setTextureOffset(0, 16).addBox(-2.0F, -2.0F, -14.2F, 4, 2, 1, false); + lid.setTextureOffset(8, 8).addBox(-1.0F, -1.0F, -15.0F, 2, 2, 1, false); + + padBottom = new ModelRenderer(this); + padBottom.setRotationPoint(0.0F, 15.0F, 7.0F); + padBottom.setTextureOffset(0, 19).addBox(-2.0F, -2.0F, -14.2F, 4, 2, 1, false); + + southFace = new ModelRenderer(this); + southFace.setRotationPoint(0.0F, 14.0F, 7.0F); + southFace.setTextureOffset(42, 8).addBox(-7.0F, 7.0F, -1.0F, 14, 3, 1, false); + southFace.setTextureOffset(42, 5).addBox(-7.0F, 3.0F, -1.0F, 14, 3, 1, false); + southFace.setTextureOffset(42, 1).addBox(-7.0F, -0.9F, -1.0F, 14, 3, 1, false); + southFace.setTextureOffset(0, 0).addBox(5.1F, -1.0F, -1.9F, 2, 11, 2, false); + southFace.setTextureOffset(0, 0).addBox(-7.1F, -1.0F, -1.9F, 2, 11, 2, false); + + eastFace = new ModelRenderer(this); + eastFace.setRotationPoint(0.0F, 14.0F, 7.0F); + eastFace.setTextureOffset(0, 44).addBox(-7.0F, 7.0F, -13.0F, 1, 3, 12, false); + eastFace.setTextureOffset(26, 29).addBox(-7.0F, 3.0F, -13.0F, 1, 3, 12, false); + eastFace.setTextureOffset(0, 29).addBox(-7.0F, -0.9F, -13.0F, 1, 3, 12, false); + + westFace = new ModelRenderer(this); + westFace.setRotationPoint(0.0F, 14.0F, 7.0F); + westFace.setTextureOffset(0, 44).addBox(6.0F, 7.0F, -13.0F, 1, 3, 12, false); + westFace.setTextureOffset(26, 29).addBox(6.0F, 3.0F, -13.0F, 1, 3, 12, false); + westFace.setTextureOffset(0, 29).addBox(6.0F, -0.9F, -13.0F, 1, 3, 12, false); + + bottomFace = new ModelRenderer(this); + bottomFace.setRotationPoint(0.0F, 24.0F, 0.0F); + bottomFace.setTextureOffset(0, 16).addBox(-6.0F, -1.0F, -6.0F, 12, 1, 12, false); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + lid.render(f5); + padBottom.render(f5); + northFace.render(f5); + southFace.render(f5); + eastFace.render(f5); + westFace.render(f5); + bottomFace.render(f5); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } + + @Override + public void renderAll(ITreasureChestTileEntity te) { + float angle = 0.0625F; + + lid.render(angle); + padBottom.render(angle); + northFace.render(angle); + southFace.render(angle); + eastFace.render(angle); + westFace.render(angle); + bottomFace.render(angle); + } + + @Override + public ModelRenderer getLid() { + return lid; + } + +} \ No newline at end of file diff --git a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CardboardBoxTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CardboardBoxTileEntityRenderer.java new file mode 100644 index 000000000..6054e4dfe --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CardboardBoxTileEntityRenderer.java @@ -0,0 +1,64 @@ +/** + * + */ +package com.someguyssoftware.treasure2.client.render.tileentity; + +import com.someguyssoftware.treasure2.client.model.CardboardBoxModel; +import com.someguyssoftware.treasure2.client.model.ITreasureChestModel; +import com.someguyssoftware.treasure2.lock.LockState; +import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; +import com.someguyssoftware.treasure2.tileentity.CardboardBoxTileEntity; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.item.ItemStack; + +/** + * @author Mark Gottschling onJan 9, 2018 + * + */ +public class CardboardBoxTileEntityRenderer extends TreasureChestTileEntityRenderer { + + /** + * + * @param texture + */ + public CardboardBoxTileEntityRenderer(String texture, ITreasureChestModel model) { + super(texture, model); + } + + @Override + public void updateModelLidRotation(AbstractTreasureChestTileEntity te, float partialTicks) { + CardboardBoxTileEntity cte = (CardboardBoxTileEntity) te; + + // update in the inner lid + float innerLidRotation = cte.prevInnerLidAngle + (cte.innerLidAngle - cte.prevInnerLidAngle) * partialTicks; + innerLidRotation = 1.0F - innerLidRotation; + innerLidRotation = 1.0F - innerLidRotation * innerLidRotation * innerLidRotation; + ((CardboardBoxModel)getModel()).getInnerLid().rotateAngleX = (innerLidRotation * (float) Math.PI / getAngleModifier()); // not negated + + float lidRotation = te.prevLidAngle + (te.lidAngle - te.prevLidAngle) * partialTicks; + lidRotation = 1.0F - lidRotation; + lidRotation = 1.0F - lidRotation * lidRotation * lidRotation; + getModel().getLid().rotateAngleZ = -(lidRotation * (float) Math.PI / getAngleModifier()); + } + + @Override + public float getAngleModifier() { + return 0.8F; + } + + @Override + public void updateLockRotation(LockState lockState) { + // rotate the locks on the x axis to lay flat + GlStateManager.rotate(90, 1.0F, 0.0F, 0.0F); // NOTE changed from Y to X axis + // rotate lock to the correct direction that the block is facing. + GlStateManager.rotate(lockState.getSlot().getRotation(), 0.0F, 0.0F, 1.0F); // NOTE now Z axis is the Y axis since we rotated on the X axis first. + } + + @Override + public void updateLockScale() { + GlStateManager.scale(0.35F, 0.35F, 0.35F); + } +} \ No newline at end of file diff --git a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CauldronChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CauldronChestTileEntityRenderer.java index d9a470c08..1c40d5264 100644 --- a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CauldronChestTileEntityRenderer.java +++ b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CauldronChestTileEntityRenderer.java @@ -3,16 +3,12 @@ */ package com.someguyssoftware.treasure2.client.render.tileentity; -import com.someguyssoftware.treasure2.client.model.CauldronChestModel; import com.someguyssoftware.treasure2.client.model.ITreasureChestModel; import com.someguyssoftware.treasure2.lock.LockState; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; import com.someguyssoftware.treasure2.tileentity.CauldronChestTileEntity; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; -import net.minecraft.item.ItemStack; /** * @author Mark Gottschling onJan 9, 2018 @@ -28,122 +24,26 @@ public CauldronChestTileEntityRenderer(String texture, ITreasureChestModel model super(texture, model); } - /** - * - * @param te - * @param x - * @param y - * @param z - * @param partialTicks - * @param destroyStage - * @param alpha - */ @Override - public void render(AbstractTreasureChestTileEntity te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { - - if (!(te instanceof CauldronChestTileEntity)) return; // should never happen - - // add the destory textures - if (destroyStage >= 0) { - this.bindTexture(DESTROY_STAGES[destroyStage]); - GlStateManager.matrixMode(5890); - GlStateManager.pushMatrix(); - GlStateManager.scale(4.0F, 4.0F, 1.0F); - GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); - GlStateManager.matrixMode(5888); - } - - // get the model - CauldronChestModel model = (CauldronChestModel) getModel(); - - // bind the texture - this.bindTexture(getTexture()); - // get the chest rotation - int meta = 0; - if (te.hasWorld()) { - meta = te.getBlockMetadata(); - } - int rotation = getRotation(meta); - - // start render matrix - GlStateManager.pushMatrix(); - // initial position (centered moved up) - // (chest entity were created in Techne and need different translations than vanilla tile entities) - GlStateManager.translate((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F); - - // This rotation part is very important! Without it, your model will render upside-down. - // (rotate 180 degrees around the z-axis) - GlStateManager.rotate(180F, 0F, 0F, 1.0F); - // rotate block to the correct direction that it is facing. - GlStateManager.rotate((float)rotation, 0.0F, 1.0F, 0.0F); - + public void updateModelLidRotation(AbstractTreasureChestTileEntity te, float partialTicks) { CauldronChestTileEntity cte = (CauldronChestTileEntity) te; float lidRotation = cte.prevLidAngle + (cte.lidAngle - cte.prevLidAngle) * partialTicks; lidRotation = 1.0F - lidRotation; lidRotation = 1.0F - lidRotation * lidRotation * lidRotation; // NOTE positive rotation here (getLid() returns lidLeft property) - model.getLid().rotateAngleZ = (lidRotation * (float)Math.PI / getAngleModifier()); - - model.renderAll(te); - - GlStateManager.popMatrix(); - // end of rendering chest entity //// - - - // pop the destroy stage matrix - if (destroyStage >= 0) { - GlStateManager.matrixMode(5890); - GlStateManager.popMatrix(); - GlStateManager.matrixMode(5888); - } - - ////////////// render the locks ////////////////////////////////////// - if (!te.getLockStates().isEmpty()) { - renderLocks(te, x, y, z); - } - ////////////// end of render the locks ////////////////////////////////////// - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + getModel().getLid().rotateAngleZ = (lidRotation * (float)Math.PI / getAngleModifier()); } - - /** - * - * @param te - * @param x - * @param y - * @param z - */ + @Override - public void renderLocks(AbstractTreasureChestTileEntity te, double x, double y, double z) { - /* - * UP and DOWN facing locks will not get rotated like the other directions do, so get the chest's rotation - */ - int meta = 0; - if (te.hasWorld()) { - meta = te.getBlockMetadata(); - } - int rotation = getRotation(meta); - - // render locks - for (LockState lockState : te.getLockStates()) { - // Treasure.logger.debug("Render LS:" + lockState); - if (lockState.getLock() != null) { - // convert lock to an item stack - ItemStack lockStack = new ItemStack(lockState.getLock()); - - GlStateManager.pushMatrix(); - // NOTE when rotating the item to match the face of chest, must adjust the - // amount of offset to the x,z axises and not rotate() the item - // - rotate() just spins it in place, not around the axis of the block - GlStateManager.translate((float) x + lockState.getSlot().getXOffset(), (float) y + lockState.getSlot().getYOffset(), (float) z + lockState.getSlot().getZOffset()); - // rotate the locks on the x axis to lay flat - GlStateManager.rotate(90, 1.0F, 0.0F, 0.0F); // NOTE changed from Y to X axis - // rotate lock to the correct direction that the block is facing. - GlStateManager.rotate(/*(float)rotation*/lockState.getSlot().getRotation(), 0.0F, 0.0F, 1.0F); // NOTE now Z axis is the Y axis since we rotated on the X axis first. - // shrink the locks a bit - GlStateManager.scale(0.35F, 0.35F, 0.35F); - Minecraft.getMinecraft().getRenderItem().renderItem(lockStack, ItemCameraTransforms.TransformType.NONE); - GlStateManager.popMatrix(); - } - } + public void updateLockRotation(LockState lockState) { + // rotate the locks on the x axis to lay flat + GlStateManager.rotate(90, 1.0F, 0.0F, 0.0F); // NOTE changed from Y to X axis + // rotate lock to the correct direction that the block is facing. + GlStateManager.rotate(lockState.getSlot().getRotation(), 0.0F, 0.0F, 1.0F); // NOTE now Z axis is the Y axis since we rotated on the X axis first. + } + + @Override + public void updateLockScale() { + GlStateManager.scale(0.35F, 0.35F, 0.35F); } } \ No newline at end of file diff --git a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CompressorChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CompressorChestTileEntityRenderer.java index 46131b164..a7ababf71 100644 --- a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CompressorChestTileEntityRenderer.java +++ b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/CompressorChestTileEntityRenderer.java @@ -3,17 +3,9 @@ */ package com.someguyssoftware.treasure2.client.render.tileentity; -import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.client.model.ITreasureChestModel; -import com.someguyssoftware.treasure2.lock.LockState; -import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; /** * @@ -29,125 +21,21 @@ public class CompressorChestTileEntityRenderer extends TreasureChestTileEntityRe public CompressorChestTileEntityRenderer(String texture, ITreasureChestModel model) { super(texture, model); } - - /** - * - * @param te - * @param x - * @param y - * @param z - * @param partialTicks - * @param destroyStage - * @param alpha - */ - public void render(AbstractTreasureChestTileEntity te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { - - if (!(te instanceof AbstractTreasureChestTileEntity)) return; // should never happen - - // add the destory textures - if (destroyStage >= 0) { - this.bindTexture(DESTROY_STAGES[destroyStage]); - GlStateManager.matrixMode(5890); - GlStateManager.pushMatrix(); - GlStateManager.scale(4.0F, 4.0F, 1.0F); - GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); - GlStateManager.matrixMode(5888); - } - - // get the model - ITreasureChestModel model = getModel(); - // bind the texture - this.bindTexture(getTexture()); - // get the chest rotation - int meta = 0; - if (te.hasWorld()) { - meta = te.getBlockMetadata(); - } - int rotation = getRotation(meta); - - // start render matrix - GlStateManager.pushMatrix(); - // initial position (centered moved up) - // (chest entity were created in Techne and need different translations than vanilla tile entities) - GlStateManager.translate((float)x + 0.5F, (float)y + 0.75F, (float)z + 0.5F); - - // This rotation part is very important! Without it, your model will render upside-down. - // (rotate 180 degrees around the z-axis) - GlStateManager.rotate(180F, 0F, 0F, 1.0F); - // rotate block to the correct direction that it is facing. - GlStateManager.rotate((float)rotation, 0.0F, 1.0F, 0.0F); - // shrink the size of the chest by half - GlStateManager.scale(0.5F, 0.5F, 0.5F); - - float lidRotation = te.prevLidAngle + (te.lidAngle - te.prevLidAngle) * partialTicks; - lidRotation = 1.0F - lidRotation; - lidRotation = 1.0F - lidRotation * lidRotation * lidRotation; - model.getLid().rotateAngleX = -(lidRotation * (float)Math.PI / 2.0F); - - model.renderAll(te); - - GlStateManager.popMatrix(); - // end of rendering chest entity //// - - - // pop the destroy stage matrix - if (destroyStage >= 0) { - GlStateManager.matrixMode(5890); - GlStateManager.popMatrix(); - GlStateManager.matrixMode(5888); - } - - ////////////// render the locks ////////////////////////////////////// - if (te.getLockStates() != null && !te.getLockStates().isEmpty()) { - renderLocks(te, x, y, z); - } - ////////////// end of render the locks ////////////////////////////////////// - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - } + + @Override + public void updateTranslation(double x, double y, double z) { + // initial position (centered moved up only half as normal as the size if half as normal) + GlStateManager.translate((float)x + 0.5F, (float)y + 0.75F, (float)z + 0.5F); + } - /** - * - * @param meta - * @return - */ - public int getRotation(int meta) { - switch(meta) { - case NORTH: return 0; - case SOUTH: return 180; - case WEST: return -90; - case EAST: return 90; - } - return 0; - } + @Override + public void updateScale() { + // shrink the size of the chest by half + GlStateManager.scale(0.5F, 0.5F, 0.5F); + } - /** - * - * @param te - * @param x - * @param y - * @param z - */ - public void renderLocks(AbstractTreasureChestTileEntity te, double x, double y, double z) { -// Treasure.logger.debug("====================================================================="); - // render locks - for (LockState lockState : te.getLockStates()) { -// Treasure.logger.debug("Render LS:" + lockState); - if (lockState.getLock() != null) { - // convert lock to an item stack - ItemStack lockStack = new ItemStack(lockState.getLock()); - - GlStateManager.pushMatrix(); - // NOTE when rotating the item to match the face of chest, must adjust the amount of offset to the x,z axises and - // not rotate() the item - rotate() just spins it in place, not around the axis of the block - GlStateManager.translate( - (float)x + lockState.getSlot().getXOffset(), - (float)y + lockState.getSlot().getYOffset(), - (float)z + lockState.getSlot().getZOffset()); - GlStateManager.rotate(lockState.getSlot().getRotation(), 0F, 1.0F, 0.0F); - GlStateManager.scale(0.20F, 0.20F, 0.20F); - Minecraft.getMinecraft().getRenderItem().renderItem(lockStack, ItemCameraTransforms.TransformType.NONE); - GlStateManager.popMatrix(); - } - } - } + @Override + public void updateLockScale() { + GlStateManager.scale(0.20F, 0.20F, 0.20F); + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/ITreasureChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/ITreasureChestTileEntityRenderer.java new file mode 100644 index 000000000..200dcda55 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/ITreasureChestTileEntityRenderer.java @@ -0,0 +1,119 @@ +package com.someguyssoftware.treasure2.client.render.tileentity; + +import com.someguyssoftware.treasure2.client.model.ITreasureChestModel; +import com.someguyssoftware.treasure2.lock.LockState; +import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.ResourceLocation; + +public interface ITreasureChestTileEntityRenderer { + + int NORTH = 2; + int SOUTH = 3; + int WEST = 4; + int EAST = 5; + + /** + * + * @param meta + * @return + */ + default public int getRotation(int meta) { + switch (meta) { + case NORTH: + return 0; + case SOUTH: + return 180; + case WEST: + return -90; + case EAST: + return 90; + } + return 0; + } + + /** + * + * @param x + * @param y + * @param z + */ + default public void updateTranslation(double x, double y, double z) { + GlStateManager.translate((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F); + } + + /** + * + */ + default public void updateScale() { + GlStateManager.scale(1F, 1F, 1F); + } + + /** + * + */ + default public void updateLockScale() { + GlStateManager.scale(0.5F, 0.5F, 0.5F); + } + + /** + * + * @param lockState + */ + default public void updateLockRotation(LockState lockState) { + GlStateManager.rotate(lockState.getSlot().getRotation(), 0F, 1.0F, 0.0F); + } + + /** + * + * @param te + * @param partialTicks + */ + default public void updateModelLidRotation(AbstractTreasureChestTileEntity te, float partialTicks) { + float lidRotation = te.prevLidAngle + (te.lidAngle - te.prevLidAngle) * partialTicks; + lidRotation = 1.0F - lidRotation; + lidRotation = 1.0F - lidRotation * lidRotation * lidRotation; + getModel().getLid().rotateAngleX = -(lidRotation * (float) Math.PI / getAngleModifier()); + } + + /** + * @return the texture + */ + ResourceLocation getTexture(); + + /** + * @param texture + * the texture to set + */ + void setTexture(ResourceLocation texture); + + /** + * @return the model + */ + ITreasureChestModel getModel(); + + /** + * @param model + * the model to set + */ + void setModel(ITreasureChestModel model); + + /** + * Modifies the max angle that the lid can swing. + * The max swing angle by default is 180 degrees. The max swing angle is divided the modifier. + * Increasing the size of the modifier reduces the size of the max swing angle. + * Ex: + * Return 0.8 = 225 degrees + * Return 1.0 = 180 degrees + * Return 2.0 = 90 degrees + * Return 3.0 = 60 degrees + * Return 4.0 = 45 degrees + * + * @return + */ + default public float getAngleModifier() { + return 2.0F; + } + +} \ No newline at end of file diff --git a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/MilkCrateTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/MilkCrateTileEntityRenderer.java new file mode 100644 index 000000000..1d03e3d80 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/MilkCrateTileEntityRenderer.java @@ -0,0 +1,41 @@ +/** + * + */ +package com.someguyssoftware.treasure2.client.render.tileentity; + +import com.someguyssoftware.treasure2.client.model.ITreasureChestModel; + +import net.minecraft.client.renderer.GlStateManager; + +/** + * + * @author Mark Gottschling on Mar 23, 2018 + * + */ +public class MilkCrateTileEntityRenderer extends TreasureChestTileEntityRenderer { + + /** + * + * @param texture + */ + public MilkCrateTileEntityRenderer(String texture, ITreasureChestModel model) { + super(texture, model); + } + + @Override + public void updateTranslation(double x, double y, double z) { + // initial position (centered moved up only half as normal as the size if half as normal) + GlStateManager.translate((float)x + 0.5F, (float)y + 1.15625F, (float)z + 0.5F); + } + + @Override + public void updateScale() { + // shrink the size of the chest by half + GlStateManager.scale(0.75F, 0.75F, 0.75F); + } + + @Override + public void updateLockScale() { + GlStateManager.scale(0.28F, 0.28F, 0.28F); + } +} diff --git a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SafeTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SafeTileEntityRenderer.java index 666aa3f1e..12b69da47 100644 --- a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SafeTileEntityRenderer.java +++ b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SafeTileEntityRenderer.java @@ -80,15 +80,7 @@ public void render(AbstractTreasureChestTileEntity te, double x, double y, doubl GlStateManager.rotate((float)rotation, 0.0F, 1.0F, 0.0F); SafeTileEntity ste = (SafeTileEntity) te; -// float latchRotation = ste.prevLatchAngle + (ste.latchAngle - ste.prevLatchAngle) * partialTicks; -// latchRotation = 1.0F - latchRotation; -// latchRotation = 1.0F - latchRotation * latchRotation * latchRotation; -// model.getLatch1().rotateAngleX = -(latchRotation * (float)Math.PI / 2.0F); - -// float latchSlide = ste.prevLatchPos + (ste.latchPos - ste.prevLatchPos) * partialTicks; -// latchSlide = 1.0F - latchSlide; -// model.latch1.rotationPointX += latchSlide; - + if (ste.isLidClosed) { float handleRotation = ste.prevHandleAngle + (ste.handleAngle - ste.prevHandleAngle) * partialTicks; handleRotation = 1.0F - handleRotation; @@ -124,37 +116,9 @@ public void render(AbstractTreasureChestTileEntity te, double x, double y, doubl ////////////// end of render the locks ////////////////////////////////////// GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); } - - /** - * - * @param te - * @param x - * @param y - * @param z - */ + @Override - public void renderLocks(AbstractTreasureChestTileEntity te, double x, double y, double z) { - // render locks - for (LockState lockState : te.getLockStates()) { - if (lockState.getLock() != null) { - // convert lock to an item stack - ItemStack lockStack = new ItemStack(lockState.getLock()); - - GlStateManager.pushMatrix(); - // NOTE when rotating the item to match the face of chest, must adjust the amount of offset to the x,z axises and - // not rotate() the item - rotate() just spins it in place, not around the axis of the block - GlStateManager.translate( - (float)x + lockState.getSlot().getXOffset(), - (float)y + lockState.getSlot().getYOffset(), - (float)z + lockState.getSlot().getZOffset()); - GlStateManager.rotate(lockState.getSlot().getRotation(), 0F, 1.0F, 0.0F); - // TODO would be better if there was a property for scale - // reduce the size of the locks - GlStateManager.scale(0.3F, 0.3F, 0.3F); - Minecraft.getMinecraft().getRenderItem().renderItem(lockStack, ItemCameraTransforms.TransformType.NONE); - GlStateManager.popMatrix(); - } - } - } - + public void updateLockScale() { + GlStateManager.scale(0.3F, 0.3F, 0.3F); + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SkullChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SkullChestTileEntityRenderer.java index 0ab667973..11125c9b0 100644 --- a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SkullChestTileEntityRenderer.java +++ b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/SkullChestTileEntityRenderer.java @@ -13,7 +13,7 @@ import net.minecraft.item.ItemStack; /** - * @author Mark Gottschling onJan 9, 2018 + * @author Mark Gottschling on Jan 9, 2018 * */ public class SkullChestTileEntityRenderer extends TreasureChestTileEntityRenderer { @@ -34,33 +34,8 @@ public float getAngleModifier() { return 3.0F; } - // TODO this is exactly the same as Strongbox - /** - * - * @param te - * @param x - * @param y - * @param z - */ - public void renderLocks(AbstractTreasureChestTileEntity te, double x, double y, double z) { - // render locks - for (LockState lockState : te.getLockStates()) { - if (lockState.getLock() != null) { - // convert lock to an item stack - ItemStack lockStack = new ItemStack(lockState.getLock()); - - GlStateManager.pushMatrix(); - // NOTE when rotating the item to match the face of chest, must adjust the amount of offset to the x,z axises and - // not rotate() the item - rotate() just spins it in place, not around the axis of the block - GlStateManager.translate( - (float)x + lockState.getSlot().getXOffset(), - (float)y + lockState.getSlot().getYOffset(), - (float)z + lockState.getSlot().getZOffset()); - GlStateManager.rotate(lockState.getSlot().getRotation(), 0F, 1.0F, 0.0F); - GlStateManager.scale(0.25F, 0.25F, 0.25F); - Minecraft.getMinecraft().getRenderItem().renderItem(lockStack, ItemCameraTransforms.TransformType.NONE); - GlStateManager.popMatrix(); - } - } - } + @Override + public void updateLockScale() { + GlStateManager.scale(0.25F, 0.25F, 0.25F); + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/StrongboxTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/StrongboxTileEntityRenderer.java index 538da25ae..441252707 100644 --- a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/StrongboxTileEntityRenderer.java +++ b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/StrongboxTileEntityRenderer.java @@ -13,7 +13,7 @@ import net.minecraft.item.ItemStack; /** - * @author Mark Gottschling onJan 9, 2018 + * @author Mark Gottschling on Jan 9, 2018 * */ public class StrongboxTileEntityRenderer extends TreasureChestTileEntityRenderer { @@ -24,34 +24,10 @@ public class StrongboxTileEntityRenderer extends TreasureChestTileEntityRenderer */ public StrongboxTileEntityRenderer(String texture, ITreasureChestModel model) { super(texture, model); - } - - /** - * - * @param te - * @param x - * @param y - * @param z - */ - public void renderLocks(AbstractTreasureChestTileEntity te, double x, double y, double z) { - // render locks - for (LockState lockState : te.getLockStates()) { - if (lockState.getLock() != null) { - // convert lock to an item stack - ItemStack lockStack = new ItemStack(lockState.getLock()); - - GlStateManager.pushMatrix(); - // NOTE when rotating the item to match the face of chest, must adjust the amount of offset to the x,z axises and - // not rotate() the item - rotate() just spins it in place, not around the axis of the block - GlStateManager.translate( - (float)x + lockState.getSlot().getXOffset(), - (float)y + lockState.getSlot().getYOffset(), - (float)z + lockState.getSlot().getZOffset()); - GlStateManager.rotate(lockState.getSlot().getRotation(), 0F, 1.0F, 0.0F); - GlStateManager.scale(0.25F, 0.25F, 0.25F); - Minecraft.getMinecraft().getRenderItem().renderItem(lockStack, ItemCameraTransforms.TransformType.NONE); - GlStateManager.popMatrix(); - } - } - } + } + + @Override + public void updateLockScale() { + GlStateManager.scale(0.25F, 0.25F, 0.25F); + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/TreasureChestTileEntityRenderer.java b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/TreasureChestTileEntityRenderer.java index 5dc613a61..0f413f9d5 100644 --- a/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/TreasureChestTileEntityRenderer.java +++ b/src/main/java/com/someguyssoftware/treasure2/client/render/tileentity/TreasureChestTileEntityRenderer.java @@ -19,12 +19,7 @@ * @author Mark Gottschling onJan 9, 2018 * */ -public class TreasureChestTileEntityRenderer extends TileEntitySpecialRenderer { - public static final int NORTH = 2; - public static final int SOUTH = 3; - public static final int WEST = 4; - public static final int EAST = 5; - +public class TreasureChestTileEntityRenderer extends TileEntitySpecialRenderer implements ITreasureChestTileEntityRenderer { private ResourceLocation texture; private ITreasureChestModel model; @@ -97,18 +92,19 @@ public void render(AbstractTreasureChestTileEntity te, double x, double y, doubl // start render matrix GlStateManager.pushMatrix(); + // initial position (centered moved up) - // (chest entity were created in Techne and need different translations than - // vanilla tile entities) - GlStateManager.translate((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); + updateTranslation(x, y, z); - // This rotation part is very important! Without it, your model will render - // upside-down. + // This rotation part is very important! Without it, your model will render upside-down. // (rotate 180 degrees around the z-axis) GlStateManager.rotate(180F, 0F, 0F, 1.0F); // rotate block to the correct direction that it is facing. GlStateManager.rotate((float) rotation, 0.0F, 1.0F, 0.0F); - + + // add scale method + updateScale(); + // update the lid rotation updateModelLidRotation(te, partialTicks); @@ -122,60 +118,14 @@ public void render(AbstractTreasureChestTileEntity te, double x, double y, doubl popDestroyGlState(destroyStage); ////////////// render the locks ////////////////////////////////////// - if (!te.getLockStates().isEmpty()) { + if (te.getLockStates() != null && !te.getLockStates().isEmpty()) { renderLocks(te, x, y, z); } + ////////////// end of render the locks ////////////////////////////////////// GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); } - // TODO move out to interface - /** - * - * @param te - * @param partialTicks - */ - public void updateModelLidRotation(AbstractTreasureChestTileEntity te, float partialTicks) { - float lidRotation = te.prevLidAngle + (te.lidAngle - te.prevLidAngle) * partialTicks; - lidRotation = 1.0F - lidRotation; - lidRotation = 1.0F - lidRotation * lidRotation * lidRotation; - model.getLid().rotateAngleX = -(lidRotation * (float) Math.PI / getAngleModifier()); - } - - /** - * Modifies the max angle that the lid can swing. - * The max swing angle by default is 180 degrees. The max swing angle is divided the modifier. - * Increasing the size of the modifier reduces the size of the max swing angle. - * Ex: - * Return 2.0 = 90 degrees - * Return 3.0 = 60 degrees - * Return 4.0 = 45 degrees - * - * @return - */ - public float getAngleModifier() { - return 2.0F; - } - - /** - * - * @param meta - * @return - */ - public int getRotation(int meta) { - switch (meta) { - case NORTH: - return 0; - case SOUTH: - return 180; - case WEST: - return -90; - case EAST: - return 90; - } - return 0; - } - /** * * @param te @@ -194,12 +144,15 @@ public void renderLocks(AbstractTreasureChestTileEntity te, double x, double y, GlStateManager.pushMatrix(); // NOTE when rotating the item to match the face of chest, must adjust the - // amount of offset to the x,z axises and - // not rotate() the item - rotate() just spins it in place, not around the axis - // of the block - GlStateManager.translate((float) x + lockState.getSlot().getXOffset(), (float) y + lockState.getSlot().getYOffset(), (float) z + lockState.getSlot().getZOffset()); - GlStateManager.rotate(lockState.getSlot().getRotation(), 0F, 1.0F, 0.0F); - GlStateManager.scale(0.5F, 0.5F, 0.5F); + // amount of offset to the x,z axises and not rotate() the item - rotate() just + // spins it in place, not around the axis of the block + GlStateManager.translate( + (float) x + lockState.getSlot().getXOffset(), + (float) y + lockState.getSlot().getYOffset(), + (float) z + lockState.getSlot().getZOffset()); +// GlStateManager.rotate(lockState.getSlot().getRotation(), 0F, 1.0F, 0.0F); + updateLockRotation(lockState); + updateLockScale(); Minecraft.getMinecraft().getRenderItem().renderItem(lockStack, ItemCameraTransforms.TransformType.NONE); GlStateManager.popMatrix(); } @@ -209,6 +162,7 @@ public void renderLocks(AbstractTreasureChestTileEntity te, double x, double y, /** * @return the texture */ + @Override public ResourceLocation getTexture() { return texture; } @@ -217,6 +171,7 @@ public ResourceLocation getTexture() { * @param texture * the texture to set */ + @Override public void setTexture(ResourceLocation texture) { this.texture = texture; } @@ -224,6 +179,7 @@ public void setTexture(ResourceLocation texture) { /** * @return the model */ + @Override public ITreasureChestModel getModel() { return model; } @@ -232,6 +188,7 @@ public ITreasureChestModel getModel() { * @param model * the model to set */ + @Override public void setModel(ITreasureChestModel model) { this.model = model; } diff --git a/src/main/java/com/someguyssoftware/treasure2/model/TreasureModels.java b/src/main/java/com/someguyssoftware/treasure2/model/TreasureModels.java index b3f3851e0..361dd1258 100644 --- a/src/main/java/com/someguyssoftware/treasure2/model/TreasureModels.java +++ b/src/main/java/com/someguyssoftware/treasure2/model/TreasureModels.java @@ -40,15 +40,17 @@ public static void registerModels(ModelRegistryEvent event) { registerItemModel(Item.getItemFromBlock(TreasureBlocks.GOLD_STRONGBOX)); registerItemModel(Item.getItemFromBlock(TreasureBlocks.SAFE)); registerItemModel(Item.getItemFromBlock(TreasureBlocks.DREAD_PIRATE_CHEST)); -// registerItemModel(Item.getItemFromBlock(TreasureBlocks.WHALE_BONE_PIRATE_CHEST)); registerItemModel(Item.getItemFromBlock(TreasureBlocks.COMPRESSOR_CHEST)); registerItemModel(Item.getItemFromBlock(TreasureBlocks.WITHER_CHEST)); registerItemModel(Item.getItemFromBlock(TreasureBlocks.GOLD_SKULL_CHEST)); registerItemModel(Item.getItemFromBlock(TreasureBlocks.SKULL_CHEST)); + registerItemModel(Item.getItemFromBlock(TreasureBlocks.CRYSTAL_SKULL_CHEST)); registerItemModel(Item.getItemFromBlock(TreasureBlocks.CAULDRON_CHEST)); registerItemModel(Item.getItemFromBlock(TreasureBlocks.SPIDER_CHEST)); registerItemModel(Item.getItemFromBlock(TreasureBlocks.VIKING_CHEST)); - + registerItemModel(Item.getItemFromBlock(TreasureBlocks.CARDBOARD_BOX)); + registerItemModel(Item.getItemFromBlock(TreasureBlocks.MILK_CRATE)); + // MIMICS registerItemModel(Item.getItemFromBlock(TreasureBlocks.WOOD_MIMIC)); registerItemModel(Item.getItemFromBlock(TreasureBlocks.PIRATE_MIMIC)); diff --git a/src/main/java/com/someguyssoftware/treasure2/proxy/ClientProxy.java b/src/main/java/com/someguyssoftware/treasure2/proxy/ClientProxy.java index 6c376e968..757337802 100644 --- a/src/main/java/com/someguyssoftware/treasure2/proxy/ClientProxy.java +++ b/src/main/java/com/someguyssoftware/treasure2/proxy/ClientProxy.java @@ -5,11 +5,13 @@ import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.client.model.BandedChestModel; +import com.someguyssoftware.treasure2.client.model.CardboardBoxModel; import com.someguyssoftware.treasure2.client.model.CauldronChestModel; import com.someguyssoftware.treasure2.client.model.ClamChestModel; import com.someguyssoftware.treasure2.client.model.CompressorChestModel; import com.someguyssoftware.treasure2.client.model.CrateChestModel; import com.someguyssoftware.treasure2.client.model.DreadPirateChestModel; +import com.someguyssoftware.treasure2.client.model.MilkCrateModel; import com.someguyssoftware.treasure2.client.model.MimicModel; import com.someguyssoftware.treasure2.client.model.OysterChestModel; import com.someguyssoftware.treasure2.client.model.SafeModel; @@ -21,9 +23,11 @@ import com.someguyssoftware.treasure2.client.model.WitherChestModel; import com.someguyssoftware.treasure2.client.render.entity.BoundSoulRenderer; import com.someguyssoftware.treasure2.client.render.entity.MimicEntityRenderer; +import com.someguyssoftware.treasure2.client.render.tileentity.CardboardBoxTileEntityRenderer; import com.someguyssoftware.treasure2.client.render.tileentity.CauldronChestTileEntityRenderer; import com.someguyssoftware.treasure2.client.render.tileentity.CompressorChestTileEntityRenderer; import com.someguyssoftware.treasure2.client.render.tileentity.CrateChestTileEntityRenderer; +import com.someguyssoftware.treasure2.client.render.tileentity.MilkCrateTileEntityRenderer; import com.someguyssoftware.treasure2.client.render.tileentity.MolluscChestTileEntityRenderer; import com.someguyssoftware.treasure2.client.render.tileentity.SafeTileEntityRenderer; import com.someguyssoftware.treasure2.client.render.tileentity.SkullChestTileEntityRenderer; From 426ce393766a3e962cdeef08cce9429c0a129262 Mon Sep 17 00:00:00 2001 From: gottsch Date: Thu, 10 Dec 2020 13:53:01 -0500 Subject: [PATCH 15/20] add images, chest type and json --- .../treasure2/chest/TreasureChestTypes.java | 73 ++-- .../treasure2/enums/ChestGeneratorType.java | 32 +- .../eventhandler/WorldEventHandler.java | 17 +- .../chest/CrystalSkullChestGenerator.java | 97 +++++ .../loot/TreasureLootTableMaster.java | 1 + .../treasure2/blockstates/cardboard_box.json | 11 + .../blockstates/crystal_skull_chest.json | 11 + .../treasure2/blockstates/milk_crate.json | 11 + .../assets/treasure2/lang/en_US.lang | 6 + .../treasure2/models/block/cardboard_box.json | 8 + .../models/block/crystal_skull_chest.json | 9 + .../treasure2/models/block/milk_crate.json | 354 ++++++++++++++++++ .../treasure2/models/item/cardboard_box.json | 10 + .../models/item/crystal_skull_chest.json | 20 + .../treasure2/models/item/milk_crate.json | 10 + .../blocks/chests/cardboard_box_east.png | Bin 0 -> 815 bytes .../blocks/chests/cardboard_box_north.png | Bin 0 -> 795 bytes .../blocks/chests/cardboard_box_up.png | Bin 0 -> 732 bytes .../blocks/chests/crustal_skull_texture.png | Bin 0 -> 301 bytes .../blocks/chests/crystal_skull_eyes.png | Bin 0 -> 328 bytes .../chests/crystal_skull_mouth_front.png | Bin 0 -> 338 bytes .../blocks/chests/crystal_skull_texture.png | Bin 0 -> 301 bytes .../blocks/chests/milk-crate-side.png | Bin 0 -> 901 bytes .../textures/blocks/chests/milk-crate-top.png | Bin 0 -> 750 bytes .../textures/entity/chest/cardboard-box.png | Bin 0 -> 9313 bytes .../textures/entity/chest/milk-crate.png | Bin 0 -> 10394 bytes .../chests/special/crystal_skull_chest.json | 185 +++++++++ 27 files changed, 790 insertions(+), 65 deletions(-) create mode 100644 src/main/java/com/someguyssoftware/treasure2/generator/chest/CrystalSkullChestGenerator.java create mode 100644 src/main/resources/assets/treasure2/blockstates/cardboard_box.json create mode 100644 src/main/resources/assets/treasure2/blockstates/crystal_skull_chest.json create mode 100644 src/main/resources/assets/treasure2/blockstates/milk_crate.json create mode 100644 src/main/resources/assets/treasure2/models/block/cardboard_box.json create mode 100644 src/main/resources/assets/treasure2/models/block/crystal_skull_chest.json create mode 100644 src/main/resources/assets/treasure2/models/block/milk_crate.json create mode 100644 src/main/resources/assets/treasure2/models/item/cardboard_box.json create mode 100644 src/main/resources/assets/treasure2/models/item/crystal_skull_chest.json create mode 100644 src/main/resources/assets/treasure2/models/item/milk_crate.json create mode 100644 src/main/resources/assets/treasure2/textures/blocks/chests/cardboard_box_east.png create mode 100644 src/main/resources/assets/treasure2/textures/blocks/chests/cardboard_box_north.png create mode 100644 src/main/resources/assets/treasure2/textures/blocks/chests/cardboard_box_up.png create mode 100644 src/main/resources/assets/treasure2/textures/blocks/chests/crustal_skull_texture.png create mode 100644 src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_eyes.png create mode 100644 src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_mouth_front.png create mode 100644 src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_texture.png create mode 100644 src/main/resources/assets/treasure2/textures/blocks/chests/milk-crate-side.png create mode 100644 src/main/resources/assets/treasure2/textures/blocks/chests/milk-crate-top.png create mode 100644 src/main/resources/assets/treasure2/textures/entity/chest/cardboard-box.png create mode 100644 src/main/resources/assets/treasure2/textures/entity/chest/milk-crate.png create mode 100644 src/main/resources/loot_tables/treasure2/chests/special/crystal_skull_chest.json diff --git a/src/main/java/com/someguyssoftware/treasure2/chest/TreasureChestTypes.java b/src/main/java/com/someguyssoftware/treasure2/chest/TreasureChestTypes.java index 2cfa9a499..c5cc1c166 100644 --- a/src/main/java/com/someguyssoftware/treasure2/chest/TreasureChestTypes.java +++ b/src/main/java/com/someguyssoftware/treasure2/chest/TreasureChestTypes.java @@ -17,80 +17,85 @@ public class TreasureChestTypes { public static final TreasureChestType SINGLE_STANDARD; public static final TreasureChestType STRONGBOX; public static final TreasureChestType SAFE; -// public static TreasureChestType SINGLE; -// public static TreasureChestType POT; + // public static TreasureChestType SINGLE; + // public static TreasureChestType POT; public static final TreasureChestType COMPRESSOR; public static final TreasureChestType ARMOIRE; public static final TreasureChestType SKULL; public static final TreasureChestType TOP_SPLIT; public static final TreasureChestType LOW_RISE; public static final TreasureChestType VIKING; + public static final TreasureChestType MILK_CRATE; + - static { STANDARD = new TreasureChestType(3).addSlots( - new LockSlot(0, Direction.NORTH, 0.5F, 0.3F, 0.05F, 0F), - new LockSlot(1, Direction.EAST, 0.95F, 0.3F, 0.5F, 90F), - new LockSlot(2, Direction.WEST, 0.05F, 0.3F, 0.5F, -90F) - ); - + new LockSlot(0, Direction.NORTH, 0.5F, 0.3F, 0.05F, 0F), + new LockSlot(1, Direction.EAST, 0.95F, 0.3F, 0.5F, 90F), + new LockSlot(2, Direction.WEST, 0.05F, 0.3F, 0.5F, -90F) + ); + STANDARD2 = new TreasureChestType(3).addSlots( new LockSlot(0, Direction.NORTH, 0.5F, 0.2F, 0.05F, 0F), new LockSlot(1, Direction.EAST, 0.95F, 0.3F, 0.5F, 90F), new LockSlot(2, Direction.WEST, 0.05F, 0.3F, 0.5F, -90F) - ); - + ); + SINGLE_STANDARD = new TreasureChestType(1).addSlots( new LockSlot(0, Direction.NORTH, 0.5F, 0.3F, 0.05F, 0F) - ); - + ); + CRATE = new TreasureChestType(1).addSlots( new LockSlot(0, Direction.NORTH, 0.5F, 0.6F, 0.05F, 0F) - ); - + ); + + MILK_CRATE = new TreasureChestType(1).addSlots( + new LockSlot(0, Direction.NORTH, 0.5F, 0.412F, 0.15F, 0F) + ); + STRONGBOX = new TreasureChestType(3).addSlots( - new LockSlot(0, Direction.NORTH, 0.5F, 0.2F, 0.20F, 0F), - new LockSlot(1, Direction.EAST, 0.825F, 0.2F, 0.5F, 90F), - new LockSlot(2, Direction.WEST, 0.175F, 0.2F, 0.5F, -90F) - ); - + new LockSlot(0, Direction.NORTH, 0.5F, 0.2F, 0.20F, 0F), + new LockSlot(1, Direction.EAST, 0.825F, 0.2F, 0.5F, 90F), + new LockSlot(2, Direction.WEST, 0.175F, 0.2F, 0.5F, -90F) + ); + SAFE = new TreasureChestType(2).addSlots( - new LockSlot(0, Direction.NORTH, 0.25F, 0.6F, 0.1125F, 0F), - new LockSlot(1, Direction.NORTH, 0.25F, 0.3F, 0.1125F, 0F) - ); - + new LockSlot(0, Direction.NORTH, 0.25F, 0.6F, 0.1125F, 0F), + new LockSlot(1, Direction.NORTH, 0.25F, 0.3F, 0.1125F, 0F) + ); + // starts in the NW bottom corner and moves E and S and up, so (0,0,0) is NW corner and (1,1,1) is the SE corner top COMPRESSOR = new TreasureChestType(4).addSlots( new LockSlot(0, Direction.NORTH, 0.61F, 0.18F, 0.27F, 0F), new LockSlot(1, Direction.EAST, 0.73F, 0.18F, 0.61F, 90F), new LockSlot(2, Direction.WEST, 0.27F, 0.18F, 0.39F, -90F), new LockSlot(3, Direction.SOUTH, 0.39F, 0.18F, 0.73F, 0F) - ); - + ); + ARMOIRE = new TreasureChestType(2).addSlots( new LockSlot(0, Direction.NORTH, 0.5F, 0.95F, 0.05F, 0F), new LockSlot(1, Direction.NORTH, 0.5F, 0.4F, 0.05F, 0F) - ); - + ); + SKULL = new TreasureChestType(1).addSlots( new LockSlot(0, Direction.EAST, 0.72F, 0.18F, 0.5F, 90F) - ); - + ); + // NOTE the locks are meant to be on top of the chest, but they will not get rotated properly if Direction.UP. // Use the direction that the locks should initially face and have the renderer implementation render the locks on the correct axis. TOP_SPLIT = new TreasureChestType(2).addSlots( new LockSlot(0, Direction.NORTH, 0.5F, 0.95F, 0.3F, 0F), new LockSlot(1, Direction.NORTH, 0.5F, 0.95F, 0.7F, 0F) - ); - + ); + LOW_RISE = new TreasureChestType(3).addSlots( new LockSlot(0, Direction.NORTH, 0.5F, 0.2F, 0.05F, 0F), new LockSlot(1, Direction.EAST, 0.88F, 0.2F, 0.5F, 90F), new LockSlot(2, Direction.WEST, 0.12F, 0.2F, 0.5F, -90F) - ); - + ); + VIKING = new TreasureChestType(1).addSlots( new LockSlot(0, Direction.NORTH, 0.5F, 0.55F, 0.17F, 0F) - ); + ); } } diff --git a/src/main/java/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java b/src/main/java/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java index 9b9ef81b5..a61053116 100644 --- a/src/main/java/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java +++ b/src/main/java/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java @@ -9,6 +9,7 @@ import com.someguyssoftware.treasure2.generator.chest.CommonChestGenerator; import com.someguyssoftware.treasure2.generator.chest.EpicChestGenerator; import com.someguyssoftware.treasure2.generator.chest.GoldSkullChestGenerator; +import com.someguyssoftware.treasure2.generator.chest.CrystalSkullChestGenerator; import com.someguyssoftware.treasure2.generator.chest.IChestGenerator; import com.someguyssoftware.treasure2.generator.chest.RareChestGenerator; import com.someguyssoftware.treasure2.generator.chest.ScarceChestGenerator; @@ -29,21 +30,22 @@ public enum ChestGeneratorType { WITHER(WitherChestGenerator::new), SKULL(SkullChestGenerator::new), GOLD_SKULL(GoldSkullChestGenerator::new), - CAULDRON(CauldronChestGenerator::new); - - private Supplier factory; + CRYSTAL_SKULL(CrystalSkullChestGenerator::new), + CAULDRON(CauldronChestGenerator::new); - /** - * - */ - ChestGeneratorType(Supplier factory) { - this.factory = factory; - } + private Supplier factory; - /** - * - */ - public IChestGenerator getChestGenerator() { - return factory.get(); - } + /** + * + */ + ChestGeneratorType(Supplier factory) { + this.factory = factory; + } + + /** + * + */ + public IChestGenerator getChestGenerator() { + return factory.get(); + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java index 6a6f1830b..7e9aa9a08 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java @@ -54,26 +54,11 @@ public void onWorldLoad(WorldEvent.Load event) { if (WorldInfo.isServerSide(event.getWorld()) && event.getWorld().provider.getDimension() == 0) { // Treasure.logger.debug("server event"); WorldServer world = (WorldServer) event.getWorld(); - - /////////////////////////// - /// New Loot Table Master - ///============ + // called once to initiate world-level properties in the LootTableMaster Treasure.LOOT_TABLE_MASTER.init(world); // register mod's loot tables with the LootTableMaster Treasure.LOOT_TABLE_MASTER.register(mod.getId()); - - // TODO deprecated calls -// Treasure.LOOT_TABLES.init(world); -// Treasure.LOOT_TABLES.register(getMod().getId()); - - // TODO deprecated system - // register any foreign mod loot tables -// for (String foreignModID : TreasureConfig.FOREIGN_MODS.enableForeignModIDs) { -// if (Loader.isModLoaded(foreignModID)) { -// Treasure.LOOT_TABLES.register(foreignModID); -// } -// } // register files with their respective managers Treasure.META_MANAGER.register(getMod().getId()); diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CrystalSkullChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CrystalSkullChestGenerator.java new file mode 100644 index 000000000..3d1f3a0a7 --- /dev/null +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CrystalSkullChestGenerator.java @@ -0,0 +1,97 @@ +/** + * + */ +package com.someguyssoftware.treasure2.generator.chest; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.function.Supplier; + +import com.someguyssoftware.gottschcore.loot.LootTable; +import com.someguyssoftware.gottschcore.random.RandomHelper; +import com.someguyssoftware.treasure2.Treasure; +import com.someguyssoftware.treasure2.block.AbstractChestBlock; +import com.someguyssoftware.treasure2.block.TreasureBlocks; +import com.someguyssoftware.treasure2.block.TreasureChestBlock; +import com.someguyssoftware.treasure2.chest.TreasureChestType; +import com.someguyssoftware.treasure2.enums.ChestGeneratorType; +import com.someguyssoftware.treasure2.enums.Rarity; +import com.someguyssoftware.treasure2.item.LockItem; +import com.someguyssoftware.treasure2.item.TreasureItems; +import com.someguyssoftware.treasure2.loot.LootTableShell; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; +import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; +import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; + +/** + * + * @author Mark Gottschling on Dec 9, 2020 + * + */ +public class CrystalSkullChestGenerator implements IChestGenerator { + + /** + * + */ + public CrystalSkullChestGenerator() {} + + /** + * + */ + @Override + public void addGenerationContext(AbstractTreasureChestTileEntity tileEntity, Rarity rarity) { + AbstractTreasureChestTileEntity.GenerationContext generationContext = tileEntity.new GenerationContext(rarity, ChestGeneratorType.CRYSTAL_SKULL); + tileEntity.setGenerationContext(generationContext); + } + + /* + * @param random + * @param chestRarity + * @return + */ + @Override + public Optional selectLootTable2(Random random, final Rarity chestRarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.CRYSTAL_SKULL_CHEST)); + } + + @Override + public Optional selectLootTable2(Supplier factory, final Rarity rarity) { + return Optional.ofNullable(Treasure.LOOT_TABLE_MASTER.getSpecialLootTable(SpecialLootTables.CRYSTAL_SKULL_CHEST)); + } + + /** + * Always select a wither chest. + */ + @Override + public TreasureChestBlock selectChest(final Random random, final Rarity rarity) { + TreasureChestBlock chest = (TreasureChestBlock) TreasureBlocks.CRYSTAL_SKULL_CHEST; + return chest; + } + + /** + * Skull chest will have at least one lock. + */ + public int randomizedNumberOfLocksByChestType(Random random, TreasureChestType type) { + // determine the number of locks to add + int numLocks = RandomHelper.randomInt(random, 1, type.getMaxLocks()); + Treasure.logger.debug("# of locks to use: {})", numLocks); + + return numLocks; + } + + /** + * Select Locks from Uncommon and Scare rarities. + * @param chest + */ + @Override + public void addLocks(Random random, AbstractChestBlock chest, AbstractTreasureChestTileEntity te, Rarity rarity) { + // select a rarity locks + List locks = new ArrayList<>(); + locks.addAll(TreasureItems.locks.get(Rarity.RARE)); + locks.addAll(TreasureItems.locks.get(Rarity.EPIC)); + addLocks(random, chest, te, locks); + locks.clear(); + } +} \ No newline at end of file diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java index 0d1cab57b..9a344c1f8 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java @@ -237,6 +237,7 @@ public enum SpecialLootTables { WITHER_CHEST, SKULL_CHEST, GOLD_SKULL_CHEST, + CRYSTAL_SKULL_CHEST, CAULDRON_CHEST, CLAM_CHEST, OYSTER_CHEST, diff --git a/src/main/resources/assets/treasure2/blockstates/cardboard_box.json b/src/main/resources/assets/treasure2/blockstates/cardboard_box.json new file mode 100644 index 000000000..479051d48 --- /dev/null +++ b/src/main/resources/assets/treasure2/blockstates/cardboard_box.json @@ -0,0 +1,11 @@ +{ + "variants": { + "normal": { "model": "treasure2:cardboard_box" }, + "facing=north": { "model": "treasure2:cardboard_box" }, + "facing=south": { "model": "treasure2:cardboard_box", "y": 180, "uvlock": true }, + "facing=west": { "model": "treasure2:cardboard_box", "y": 270, "uvlock": true }, + "facing=east": { "model": "treasure2:cardboard_box", "y": 90, "uvlock": true }, + "facing=up": { "model": "treasure2:cardboard_box" }, + "facing=down": { "model": "treasure2:cardboard_box" } + } +} diff --git a/src/main/resources/assets/treasure2/blockstates/crystal_skull_chest.json b/src/main/resources/assets/treasure2/blockstates/crystal_skull_chest.json new file mode 100644 index 000000000..e69b06889 --- /dev/null +++ b/src/main/resources/assets/treasure2/blockstates/crystal_skull_chest.json @@ -0,0 +1,11 @@ +{ + "variants": { + "normal": { "model": "treasure2:crystal_skull_chest" }, + "facing=north": { "model": "treasure2:crystal_skull_chest" }, + "facing=south": { "model": "treasure2:crystal_skull_chest", "y": 180, "uvlock": true }, + "facing=west": { "model": "treasure2:crystal_skull_chest", "y": 270, "uvlock": true }, + "facing=east": { "model": "treasure2:crystal_skull_chest", "y": 90, "uvlock": true }, + "facing=up": { "model": "treasure2:crystal_skull_chest" }, + "facing=down": { "model": "treasure2:crystal_skull_chest" } + } +} diff --git a/src/main/resources/assets/treasure2/blockstates/milk_crate.json b/src/main/resources/assets/treasure2/blockstates/milk_crate.json new file mode 100644 index 000000000..279c6bd16 --- /dev/null +++ b/src/main/resources/assets/treasure2/blockstates/milk_crate.json @@ -0,0 +1,11 @@ +{ + "variants": { + "normal": { "model": "treasure2:milk_crate" }, + "facing=north": { "model": "treasure2:milk_crate" }, + "facing=south": { "model": "treasure2:milk_crate", "y": 180, "uvlock": true }, + "facing=west": { "model": "treasure2:milk_crate", "y": 270, "uvlock": true }, + "facing=east": { "model": "treasure2:milk_crate", "y": 90, "uvlock": true }, + "facing=up": { "model": "treasure2:milk_crate" }, + "facing=down": { "model": "treasure2:milk_crate" } + } +} diff --git a/src/main/resources/assets/treasure2/lang/en_US.lang b/src/main/resources/assets/treasure2/lang/en_US.lang index 39d7cbbe8..b8f764dae 100644 --- a/src/main/resources/assets/treasure2/lang/en_US.lang +++ b/src/main/resources/assets/treasure2/lang/en_US.lang @@ -12,9 +12,12 @@ tile.treasure2:compressor_chest.name=Compressor Chest tile.treasure2:wither_chest.name=Wither Chest tile.treasure2:skull_chest.name=Skull Chest tile.treasure2:gold_skull_chest.name=Golden Skull Chest +tile.treasure2:crystal_skull_chest.name=Crystal Skull Chest tile.treasure2:cauldron_chest.name=Cauldron Chest tile.treasure2:spider_chest.name=Spider Chest tile.treasure2:viking_chest.name=Viking Chest +tile.treasure2:cardboard_box.name=Cardboard Box +tile.treasure2:milk_crate.name=Milk Crate tile.treasure2:wood_mimic.name=Wood Mimic tile.treasure2:pirate_mimic.name=Pirate Mimic @@ -280,3 +283,6 @@ display.cauldron_chest.name=Cauldron Chest #display.oyster_chest.name=Oyster display.spider_chest.name=Spider Chest display.viking_chest.name=Viking Chest +display.cardboard_box.name=Cardboard Box +display.milk_crate.name=Milk Crate +display.crystal_skull_chest.name=Crystal Skull \ No newline at end of file diff --git a/src/main/resources/assets/treasure2/models/block/cardboard_box.json b/src/main/resources/assets/treasure2/models/block/cardboard_box.json new file mode 100644 index 000000000..f64452c92 --- /dev/null +++ b/src/main/resources/assets/treasure2/models/block/cardboard_box.json @@ -0,0 +1,8 @@ +{ + "parent": "treasure2:block/standard_chest", + "textures": { + "0": "treasure2:blocks/chests/cardboard_box_north", + "1": "treasure2:blocks/chests/cardboard_box_east", + "2": "treasure2:blocks/chests/cardboard_box_up" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/treasure2/models/block/crystal_skull_chest.json b/src/main/resources/assets/treasure2/models/block/crystal_skull_chest.json new file mode 100644 index 000000000..285c1baae --- /dev/null +++ b/src/main/resources/assets/treasure2/models/block/crystal_skull_chest.json @@ -0,0 +1,9 @@ +{ + "parent": "treasure2:block/skull_chest", + "textures": { + "1": "treasure2:blocks/chests/crystal_skull_eyes", + "2": "treasure2:blocks/chests/crystal_skull_mouth_front", + "3": "treasure2:blocks/chests/crystal_skull_texture", + "particle": "treasure2:blocks/chests/crystal_skull_texture" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/treasure2/models/block/milk_crate.json b/src/main/resources/assets/treasure2/models/block/milk_crate.json new file mode 100644 index 000000000..ee4b44e32 --- /dev/null +++ b/src/main/resources/assets/treasure2/models/block/milk_crate.json @@ -0,0 +1,354 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "treasure2:blocks/chests/milk-crate-side", + "1": "treasure2:blocks/chests/milk-crate-top", + "particle": "treasure2:blocks/chests/milk-crate-top" + }, + "elements": [ + { + "name": "slate1", + "from": [1, 0, 1], + "to": [15, 3, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, + "faces": { + "north": {"uv": [0, 9, 14, 12], "texture": "#0"}, + "east": {"uv": [54, 17, 55, 20], "texture": "#missing"}, + "south": {"uv": [0, 9, 14, 12], "texture": "#0"}, + "west": {"uv": [69, 17, 70, 20], "texture": "#missing"}, + "up": {"uv": [14, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [14, 0, 0, 1], "texture": "#0"} + } + }, + { + "name": "slate2", + "from": [1, 4, 1], + "to": [15, 7, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, + "faces": { + "north": {"uv": [0, 1, 14, 4], "texture": "#0"}, + "east": {"uv": [0, 1, 1, 4], "texture": "#0"}, + "south": {"uv": [0, 5, 14, 8], "texture": "#0"}, + "west": {"uv": [15, 1, 16, 4], "texture": "#0"}, + "up": {"uv": [15, 1, 1, 0], "texture": "#0"}, + "down": {"uv": [29, 0, 15, 1], "texture": "#0"} + } + }, + { + "name": "slate3", + "from": [1, 8, 1], + "to": [15, 11, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, + "faces": { + "north": {"uv": [0, 5, 14, 8], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 3], "texture": "#1"}, + "south": {"uv": [0, 1, 14, 4], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#1"}, + "up": {"uv": [14, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [71, 4, 57, 5], "texture": "#missing"} + } + }, + { + "name": "bracket1", + "from": [0.9, -0.1, 0.9], + "to": [2.9, 10.9, 2.9], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 1]}, + "faces": { + "north": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "east": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "south": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "west": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "up": {"uv": [14, 16, 12, 14], "texture": "#0"}, + "down": {"uv": [14, 14, 12, 16], "texture": "#0"} + } + }, + { + "name": "bracket2", + "from": [13.1, -0.1, 0.9], + "to": [15.1, 10.9, 2.9], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 0, 1]}, + "faces": { + "north": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "east": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "south": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "west": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "up": {"uv": [14, 16, 12, 14], "texture": "#0"}, + "down": {"uv": [14, 14, 12, 16], "texture": "#0"} + } + }, + { + "name": "lid", + "from": [1, 11, 1], + "to": [15, 13, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 8]}, + "faces": { + "north": {"uv": [0, 0, 14, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 14, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 14, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 14, 2], "texture": "#1"}, + "up": {"uv": [14, 14, 0, 0], "texture": "#1"}, + "down": {"uv": [42, 0, 28, 14], "texture": "#1"} + } + }, + { + "name": "padTop", + "from": [6, 11, 0.8], + "to": [10, 13, 1.8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2, 8]}, + "faces": { + "north": {"uv": [12, 14, 16, 16], "texture": "#0"}, + "east": {"uv": [15, 14, 16, 16], "texture": "#0"}, + "south": {"uv": [6, 20, 10, 22], "texture": "#missing"}, + "west": {"uv": [15, 14, 16, 16], "texture": "#0"}, + "up": {"uv": [16, 14, 12, 13], "texture": "#0"}, + "down": {"uv": [9, 19, 5, 20], "texture": "#missing"} + } + }, + { + "name": "latch", + "from": [7, 10, 0], + "to": [9, 12, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3, 8]}, + "faces": { + "north": {"uv": [12, 14, 14, 16], "texture": "#0"}, + "east": {"uv": [12, 14, 13, 16], "texture": "#0"}, + "south": {"uv": [12, 9, 14, 11], "texture": "#missing"}, + "west": {"uv": [12, 14, 13, 16], "texture": "#0"}, + "up": {"uv": [14, 14, 12, 13], "texture": "#0"}, + "down": {"uv": [14, 13, 12, 14], "texture": "#0"} + } + }, + { + "name": "padBottom", + "from": [6, 9, 0.8], + "to": [10, 11, 1.8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, + "faces": { + "north": {"uv": [12, 14, 16, 16], "texture": "#0"}, + "east": {"uv": [15, 14, 16, 16], "texture": "#0"}, + "south": {"uv": [6, 17, 10, 19], "texture": "#missing"}, + "west": {"uv": [15, 14, 16, 16], "texture": "#0"}, + "up": {"uv": [16, 14, 12, 13], "texture": "#0"}, + "down": {"uv": [16, 13, 12, 14], "texture": "#0"} + } + }, + { + "name": "southSlate1", + "from": [1, 0, 14], + "to": [15, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, + "faces": { + "north": {"uv": [0, 9, 14, 12], "texture": "#0"}, + "east": {"uv": [42, 1, 43, 4], "texture": "#missing"}, + "south": {"uv": [0, 9, 14, 12], "texture": "#0"}, + "west": {"uv": [57, 1, 58, 4], "texture": "#missing"}, + "up": {"uv": [14, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 14, 1], "texture": "#0"} + } + }, + { + "name": "southSlate2", + "from": [1, 4, 14], + "to": [15, 7, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, + "faces": { + "north": {"uv": [0, 5, 14, 8], "texture": "#0"}, + "east": {"uv": [40, 37, 41, 40], "texture": "#missing"}, + "south": {"uv": [0, 5, 14, 8], "texture": "#0"}, + "west": {"uv": [55, 37, 56, 40], "texture": "#missing"}, + "up": {"uv": [14, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [14, 0, 0, 1], "texture": "#0"} + } + }, + { + "name": "southSlate3", + "from": [1, 8, 14], + "to": [15, 11, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, + "faces": { + "north": {"uv": [0, 1, 14, 4], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 3], "texture": "#1"}, + "south": {"uv": [0, 1, 14, 4], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#1"}, + "up": {"uv": [14, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [14, 0, 0, 1], "texture": "#0"} + } + }, + { + "name": "southBracket1", + "from": [0.9, -0.1, 13.1], + "to": [2.9, 10.9, 15.1], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 13]}, + "faces": { + "north": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "east": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "south": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "west": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "up": {"uv": [14, 16, 12, 14], "texture": "#0"}, + "down": {"uv": [14, 14, 12, 16], "texture": "#0"} + } + }, + { + "name": "southBracket2", + "from": [13.1, -0.1, 13.1], + "to": [15.1, 10.9, 15.1], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 0, 13]}, + "faces": { + "north": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "east": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "south": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "west": {"uv": [14, 0, 16, 11], "texture": "#0"}, + "up": {"uv": [14, 16, 12, 14], "texture": "#0"}, + "down": {"uv": [14, 14, 12, 16], "texture": "#0"} + } + }, + { + "name": "eastSlate1", + "from": [14, 0, 2], + "to": [15, 3, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [21, 0, -4]}, + "faces": { + "north": {"uv": [38, 56, 39, 59], "texture": "#missing"}, + "east": {"uv": [0, 6, 12, 9], "texture": "#1"}, + "south": {"uv": [51, 56, 52, 59], "texture": "#missing"}, + "west": {"uv": [0, 6, 12, 9], "texture": "#1"}, + "up": {"uv": [1, 12, 0, 0], "texture": "#1"}, + "down": {"uv": [1, 0, 0, 12], "texture": "#1"} + } + }, + { + "name": "eastSlate2", + "from": [14, 4, 2], + "to": [15, 7, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [21, 4, -4]}, + "faces": { + "north": {"uv": [12, 56, 13, 59], "texture": "#missing"}, + "east": {"uv": [0, 4, 12, 7], "texture": "#1"}, + "south": {"uv": [25, 56, 26, 59], "texture": "#missing"}, + "west": {"uv": [0, 3, 12, 6], "texture": "#1"}, + "up": {"uv": [1, 12, 0, 0], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#1"} + } + }, + { + "name": "eastSlate3", + "from": [14, 8, 2], + "to": [15, 11, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [21, 8, -4]}, + "faces": { + "north": {"uv": [52, 29, 53, 32], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 3], "texture": "#1"}, + "south": {"uv": [65, 29, 66, 32], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#1"} + } + }, + { + "name": "westSlate1", + "from": [1, 0, 2], + "to": [2, 3, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, -4]}, + "faces": { + "north": {"uv": [52, 52, 53, 55], "texture": "#missing"}, + "east": {"uv": [0, 6, 12, 9], "texture": "#1"}, + "south": {"uv": [65, 52, 66, 55], "texture": "#missing"}, + "west": {"uv": [0, 6, 12, 9], "texture": "#1"}, + "up": {"uv": [1, 12, 0, 0], "texture": "#1"}, + "down": {"uv": [1, 0, 0, 12], "texture": "#1"} + } + }, + { + "name": "westSlate2", + "from": [1, 4, 2], + "to": [2, 7, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, -4]}, + "faces": { + "north": {"uv": [38, 41, 39, 44], "texture": "#missing"}, + "east": {"uv": [0, 3, 12, 6], "texture": "#1"}, + "south": {"uv": [51, 41, 52, 44], "texture": "#missing"}, + "west": {"uv": [0, 3, 12, 6], "texture": "#1"}, + "up": {"uv": [1, 12, 0, 0], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#1"} + } + }, + { + "name": "westSlate3", + "from": [1, 8, 2], + "to": [2, 11, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -4]}, + "faces": { + "north": {"uv": [12, 41, 13, 44], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 3], "texture": "#1"}, + "south": {"uv": [25, 41, 26, 44], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 3], "texture": "#1"}, + "up": {"uv": [1, 12, 0, 0], "texture": "#1"}, + "down": {"uv": [1, 0, 0, 12], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [2, 0, 2], + "to": [14, 1, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 0, 2]}, + "faces": { + "north": {"uv": [12, 28, 24, 29], "texture": "#missing"}, + "east": {"uv": [0, 28, 12, 29], "texture": "#missing"}, + "south": {"uv": [36, 28, 48, 29], "texture": "#missing"}, + "west": {"uv": [24, 28, 36, 29], "texture": "#missing"}, + "up": {"uv": [12, 12, 0, 0], "texture": "#1"}, + "down": {"uv": [0, 0, 12, 12], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "northFace", + "origin": [0, 10, 7], + "shade": false, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "lid", + "origin": [0, 11, 7], + "shade": false, + "children": [5, 6, 7] + }, + { + "name": "padBottom", + "origin": [0, 9, 7], + "shade": false, + "children": [8] + }, + { + "name": "Latch1", + "origin": [0, 9, 7], + "shade": false, + "children": [] + }, + { + "name": "southFace", + "origin": [0, 10, 7], + "shade": false, + "children": [9, 10, 11, 12, 13] + }, + { + "name": "eastFace", + "origin": [0, 10, 7], + "shade": false, + "children": [14, 15, 16] + }, + { + "name": "westFace", + "origin": [0, 10, 7], + "shade": false, + "children": [17, 18, 19] + }, + { + "name": "bottomFace", + "origin": [0, 0, 0], + "children": [20] + } + ] +} diff --git a/src/main/resources/assets/treasure2/models/item/cardboard_box.json b/src/main/resources/assets/treasure2/models/item/cardboard_box.json new file mode 100644 index 000000000..cc7fa17d1 --- /dev/null +++ b/src/main/resources/assets/treasure2/models/item/cardboard_box.json @@ -0,0 +1,10 @@ +{ + "parent": "treasure2:block/cardboard_box", + "display": { + "thirdperson": { + "rotation": [ 180, -90, 170 ], + "translation": [ 0, 1, -3 ], + "scale": [ 1.4, 1.4, 1.4 ] + } + } +} diff --git a/src/main/resources/assets/treasure2/models/item/crystal_skull_chest.json b/src/main/resources/assets/treasure2/models/item/crystal_skull_chest.json new file mode 100644 index 000000000..eb3947214 --- /dev/null +++ b/src/main/resources/assets/treasure2/models/item/crystal_skull_chest.json @@ -0,0 +1,20 @@ +{ + "parent": "treasure2:block/crystal_skull_chest", + "display": { + "thirdperson_righthand": { + "rotation": [ 45, 45, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5,0.5, 0.5 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 1, 1, 1 ] + } + } +} diff --git a/src/main/resources/assets/treasure2/models/item/milk_crate.json b/src/main/resources/assets/treasure2/models/item/milk_crate.json new file mode 100644 index 000000000..ce62217b3 --- /dev/null +++ b/src/main/resources/assets/treasure2/models/item/milk_crate.json @@ -0,0 +1,10 @@ +{ + "parent": "treasure2:block/milk_crate", + "display": { + "thirdperson": { + "rotation": [ 180, -90, 170 ], + "translation": [ 0, 1, -3 ], + "scale": [ 1.4, 1.4, 1.4 ] + } + } +} diff --git a/src/main/resources/assets/treasure2/textures/blocks/chests/cardboard_box_east.png b/src/main/resources/assets/treasure2/textures/blocks/chests/cardboard_box_east.png new file mode 100644 index 0000000000000000000000000000000000000000..abae02db2a7ae2dc420b22e5997872dce0b3abb8 GIT binary patch literal 815 zcmV+~1JL}5P)EX>4Tx04R}tkv&MmKpe$iQ$^8=f*nLeGE^rEq9Proibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Hs@X9KsG4OY zV^J}aT@|}t(Th7Ik9zor9e;vcGPz1% zOtZfq6(Mry!-{(}00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru?fApxtzTEE;AS~Fz%lCtpk3a93nanxKOnQIA-2v#m(^_NB z$($1rS?#oc zZA1j_&gF7pjKRL|+-^5|@60(L0IG_rt_himnIR&mDw)Z?@3{L*rsnQTcSK-jm>I1# zM1+V~4X|z75ui{@S7sgziLF~-59`~AMAzcRA5hN^yLaQ5LGWp#Z!c<>BR z`sz|mD~}5JkV0Lo^EvARm~$?JAA8U{X0~$gy%Q0XH`nVG5n+r0a7YBep8o?8!QFB9 t#i-8D0}iWP+Db;5^j){sUatKAtG{7K`X-0G55E8a002ovPDHLkV1n(tY|H=v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/treasure2/textures/blocks/chests/cardboard_box_north.png b/src/main/resources/assets/treasure2/textures/blocks/chests/cardboard_box_north.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6ff02711ef7341a068db11fa47dcfa8aa2edaa GIT binary patch literal 795 zcmV+$1LXXPP)EX>4Tx04R}tkv&MmKpe$iQ$^8=f*nLeGE^rEq9Proibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Hs@X9KsG4OY zV^J}aT@|}t(Th7Ik9zor9e;vcGPz1% zOtZfq6(Mry!-{(}00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliruI2(vT%KSLvbfE zDek<#Oqdz&PALUtaCiS`0M*Rc?+TKrW~5i#9d}27yR+Y&a%KiV=oA6GF#{~if|+5k zj`jnPv^v-JKoSvgB6>ZdQUI8x4s!Ru32LoG1ZGBN_Sis@y4r3*Lxu8PRZ@?V$jtt? zH=Q6eiHJ_pq>eIMe(YDb&?+EX>4Tx04R}tkv&MmKpe$iQ$^8=f*nLeGE^rEq9Proibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Hs@X9KsG4OY zV^J}aT@|}t(Th7Ik9zor9e;vcGPz1% zOtZfq6(Mry!-{(}00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru+ z_4(=YEPxgf*ruxJMB6@uZ6q;@^ckRy2cts7x4I;1z?jypD|bK=8Hp`&CAke)A3b7B zhl7i=@_g1JV&`kD!)$F918A8^RqY;^i=`GK0JAINOwz^N&{#qkQtodK;$(V=dc?@^ZF@=(Qi_$}5;B%w}9r+gm@^o9l)i-{kgd zEJd$#blPKOCT;0S&A6MAko;3ZK_^zeVPmYI!0KsTN6kN6HP-g}rIcX$!g%(5z6O=% kkh>AbwuVXA|NHa9NzBRHT))M=p&I0BPgg&ebxsLQ08Ra6WB>pF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_eyes.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..1a853c50c2ea4603d17c84c64b5d18f52fb13574 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPd4=a;`%=7YvGl4>~nIRD+&iT2ysd*(pE(3#eQEFmI zYKlU6W=V#EyQgnJie4%^P<)N2i(`nz>9>=7xegf!wC-mSKlrAnL%Uqerv3YegnLKV zmb{dVStjDr$+D!k`@*I93v3#7sR z|CqN3#qiILYqIH1cs_HQgSK_l9c#n-BKEtfrf1KwPxA_}d;Rl+@Gqvy&vs|0|N8S9 OAs(CUytn*ng9K- zKQEZp^vkr@b_Q!kr?)UoC9xgGMW`l|Qm|6X^;|IQ&6|L@1C^f(Ih9J$@y z^8bIbShEGcCPU&mbC2qFdx8D`ew;t><+~{J<@@0ge|-#iCj8}07EZq4!NzbQ$$JW0 S&4V70*F0VQT-G@yGywp|vV7_Q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_texture.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..bf94630a6e6db882f1abf226486d0a8563e7cb40 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPd4=aN&{#qkQtodK;$(V=dc?@^ZF@=(Qi_$}5;B%w}9r+gm@^o9l)i-{kgd zEJd$#blPKOCT;0S&A6MAko;3ZK_^zeVPmYI!0KsTN6kN6HP-g}rIcX$!g%(5z6O=% kkh>AbwuVXA|NHa9NzBRHT))M=p&I0BPgg&ebxsLQ08Ra6WB>pF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/treasure2/textures/blocks/chests/milk-crate-side.png b/src/main/resources/assets/treasure2/textures/blocks/chests/milk-crate-side.png new file mode 100644 index 0000000000000000000000000000000000000000..7134fcba394a46407138754537bf3b0f65ec66a1 GIT binary patch literal 901 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 Date: Thu, 10 Dec 2020 15:53:38 -0500 Subject: [PATCH 16/20] refactor. move generic loot classes to gottschcore. fix resource loading --- gradle.properties | 2 +- .../someguyssoftware/treasure2/Treasure.java | 13 +- .../treasure2/command/SpawnChestCommand.java | 10 +- .../eventhandler/ServerEventHandler.java | 3 +- .../eventhandler/WorldEventHandler.java | 16 +- .../chest/CauldronChestGenerator.java | 5 +- .../generator/chest/CommonChestGenerator.java | 3 +- .../chest/CrystalSkullChestGenerator.java | 6 +- .../chest/GoldSkullChestGenerator.java | 6 +- .../generator/chest/IChestGenerator.java | 5 +- .../generator/chest/RareChestGenerator.java | 6 +- .../generator/chest/ScarceChestGenerator.java | 6 +- .../generator/chest/SkullChestGenerator.java | 6 +- .../chest/UncommonChestGenerator.java | 6 +- .../generator/chest/WitherChestGenerator.java | 4 +- .../treasure2/item/CoinItem.java | 4 +- .../treasure2/item/PearlItem.java | 6 +- .../treasure2/item/wish/IWishable.java | 2 +- .../treasure2/loot/ILootTableMaster.java | 40 -- .../treasure2/loot/LootPoolShell.java | 42 -- .../treasure2/loot/LootTableCategory.java | 18 - .../treasure2/loot/LootTableMaster2.java | 602 ------------------ .../treasure2/loot/LootTableShell.java | 88 --- .../loot/TreasureLootTableMaster.java | 249 -------- .../loot/TreasureLootTableMaster2.java | 20 +- .../loot/TreasureLootTableRegistry.java | 23 +- .../loot/function/CharmRandomly.java | 6 +- .../loot/function/CharmRandomly2.java | 153 ----- .../treasure2/loot/function/SetCharms.java | 8 +- .../treasure2/loot/function/SetCharms2.java | 158 ----- .../treasure2/pools/treasure/common.json | 2 +- .../treasure2/pools/treasure/epic_charms.json | 8 +- .../treasure2/pools/treasure/rare_charms.json | 6 +- .../pools/treasure/scarce_charms.json | 8 +- .../pools/treasure/uncommon_charms.json | 6 +- 35 files changed, 91 insertions(+), 1455 deletions(-) delete mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/ILootTableMaster.java delete mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/LootPoolShell.java delete mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/LootTableCategory.java delete mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java delete mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java delete mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java delete mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly2.java delete mode 100644 src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms2.java diff --git a/gradle.properties b/gradle.properties index 30e0bb361..4b9b9d309 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ mod_version=1.14.0 mc_version=1.12.2 forge_version=14.23.5.2768 mappings_version=snapshot_20171003 -gottschcore_version=1.13.1 +gottschcore_version=1.14.0 patchouli_version=1.0-20.108 # paths diff --git a/src/main/java/com/someguyssoftware/treasure2/Treasure.java b/src/main/java/com/someguyssoftware/treasure2/Treasure.java index 8bf33bc11..46e7f34fe 100644 --- a/src/main/java/com/someguyssoftware/treasure2/Treasure.java +++ b/src/main/java/com/someguyssoftware/treasure2/Treasure.java @@ -17,7 +17,6 @@ import com.someguyssoftware.gottschcore.command.ShowVersionCommand; import com.someguyssoftware.gottschcore.config.IConfig; import com.someguyssoftware.gottschcore.config.ILoggerConfig; -import com.someguyssoftware.gottschcore.loot.functions.LootFunctionManager; import com.someguyssoftware.gottschcore.mod.AbstractMod; import com.someguyssoftware.gottschcore.mod.IMod; import com.someguyssoftware.gottschcore.version.BuildVersion; @@ -49,13 +48,9 @@ import com.someguyssoftware.treasure2.eventhandler.WorldEventHandler; import com.someguyssoftware.treasure2.item.PaintingItem; import com.someguyssoftware.treasure2.item.TreasureItems; -import com.someguyssoftware.treasure2.loot.LootTableMaster2; -import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2; import com.someguyssoftware.treasure2.loot.function.CharmRandomly; -import com.someguyssoftware.treasure2.loot.function.CharmRandomly2; import com.someguyssoftware.treasure2.loot.function.SetCharms; -import com.someguyssoftware.treasure2.loot.function.SetCharms2; import com.someguyssoftware.treasure2.meta.TreasureMetaManager; import com.someguyssoftware.treasure2.network.CharmMessageHandlerOnClient; import com.someguyssoftware.treasure2.network.CharmMessageToClient; @@ -214,13 +209,9 @@ public void preInt(FMLPreInitializationEvent event) { CapabilityManager.INSTANCE.register(IKeyRingCapability.class, new KeyRingStorage(), KeyRingCapability::new); CapabilityManager.INSTANCE.register(IEffectiveMaxDamageCapability.class, new EffectiveMaxDamageStorage(), EffectiveMaxDamageCapability::new); - // TODO remove these // register custom loot functions - LootFunctionManager.registerFunction(new CharmRandomly.Serializer()); - LootFunctionManager.registerFunction(new SetCharms.Serializer()); - - net.minecraft.world.storage.loot.functions.LootFunctionManager.registerFunction(new CharmRandomly2.Serializer()); - net.minecraft.world.storage.loot.functions.LootFunctionManager.registerFunction(new SetCharms2.Serializer()); + net.minecraft.world.storage.loot.functions.LootFunctionManager.registerFunction(new CharmRandomly.Serializer()); + net.minecraft.world.storage.loot.functions.LootFunctionManager.registerFunction(new SetCharms.Serializer()); } diff --git a/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java index ac57aab62..76cd6d18a 100644 --- a/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java +++ b/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java @@ -3,9 +3,6 @@ */ package com.someguyssoftware.treasure2.command; -import static com.someguyssoftware.treasure2.Treasure.logger; - -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -19,26 +16,21 @@ import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.Options; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.enums.WorldGeneratorType; import com.someguyssoftware.treasure2.generator.chest.IChestGenerator; -import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; import com.someguyssoftware.treasure2.worldgen.SurfaceChestWorldGenerator; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.world.storage.loot.LootTable; /** * diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java index b95f27fff..d5f6d5795 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/ServerEventHandler.java @@ -29,8 +29,9 @@ public ServerEventHandler(IMod mod) { public void onServerStopping(FMLServerStoppingEvent event) { Treasure.logger.debug("Closing out of world."); // clear all resource managers - Treasure.LOOT_TABLE_MASTER.clear(); +// Treasure.LOOT_TABLE_MASTER.clear(); // Treasure.LOOT_TABLES.clear(); + // TODO implement similar registries like LOOT_TABLE_MASTER Treasure.TEMPLATE_MANAGER.clear(); Treasure.META_MANAGER.clear(); } diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java index 7e9aa9a08..0833aaba4 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java @@ -4,27 +4,18 @@ package com.someguyssoftware.treasure2.eventhandler; import java.util.Map.Entry; -import java.util.Optional; import com.someguyssoftware.gottschcore.mod.IMod; import com.someguyssoftware.gottschcore.world.WorldInfo; import com.someguyssoftware.treasure2.Treasure; -import com.someguyssoftware.treasure2.config.TreasureConfig; import com.someguyssoftware.treasure2.enums.WorldGeneratorType; -import com.someguyssoftware.treasure2.loot.LootTableShell; +import com.someguyssoftware.treasure2.loot.TreasureLootTableRegistry; import com.someguyssoftware.treasure2.persistence.GenDataPersistence; import com.someguyssoftware.treasure2.registry.ChestRegistry; import com.someguyssoftware.treasure2.worldgen.ITreasureWorldGenerator; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.WorldServer; -import net.minecraft.world.storage.loot.LootTable; -import net.minecraft.world.storage.loot.LootTableList; import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.event.FMLServerStartedEvent; -import net.minecraftforge.fml.common.event.FMLServerStartingEvent; -import net.minecraftforge.fml.common.event.FMLServerStoppingEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -57,8 +48,9 @@ public void onWorldLoad(WorldEvent.Load event) { // called once to initiate world-level properties in the LootTableMaster Treasure.LOOT_TABLE_MASTER.init(world); - // register mod's loot tables with the LootTableMaster - Treasure.LOOT_TABLE_MASTER.register(mod.getId()); + + // register mod's loot tables + TreasureLootTableRegistry.register(mod.getId()); // register files with their respective managers Treasure.META_MANAGER.register(getMod().getId()); diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java index 095f89496..0a54aa679 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CauldronChestGenerator.java @@ -7,14 +7,13 @@ import java.util.Random; import java.util.function.Supplier; -import com.someguyssoftware.gottschcore.loot.LootTable; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.TreasureBlocks; import com.someguyssoftware.treasure2.block.TreasureChestBlock; import com.someguyssoftware.treasure2.enums.ChestGeneratorType; import com.someguyssoftware.treasure2.enums.Rarity; -import com.someguyssoftware.treasure2.loot.LootTableShell; -import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2.SpecialLootTables; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; /** diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java index 4ec08b9aa..d3549c5f0 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CommonChestGenerator.java @@ -7,14 +7,13 @@ import java.util.List; import java.util.Random; -import com.someguyssoftware.gottschcore.loot.LootTable; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; import com.someguyssoftware.treasure2.enums.ChestGeneratorType; import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; -import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; /** diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CrystalSkullChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CrystalSkullChestGenerator.java index 3d1f3a0a7..4616e43cf 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/CrystalSkullChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/CrystalSkullChestGenerator.java @@ -9,7 +9,7 @@ import java.util.Random; import java.util.function.Supplier; -import com.someguyssoftware.gottschcore.loot.LootTable; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; @@ -20,10 +20,8 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; -import com.someguyssoftware.treasure2.loot.LootTableShell; -import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2.SpecialLootTables; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; -import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; /** * diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java index 103375aef..9fc49bcfe 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/GoldSkullChestGenerator.java @@ -9,7 +9,7 @@ import java.util.Random; import java.util.function.Supplier; -import com.someguyssoftware.gottschcore.loot.LootTable; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; @@ -20,10 +20,8 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; -import com.someguyssoftware.treasure2.loot.LootTableShell; -import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2.SpecialLootTables; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; -import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; /** * diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java index 912566a7c..e91b02fec 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java @@ -14,6 +14,8 @@ import java.util.stream.Collectors; import com.google.common.collect.Lists; +import com.someguyssoftware.gottschcore.loot.LootPoolShell; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.gottschcore.world.gen.structure.BlockContext; @@ -32,8 +34,6 @@ import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; import com.someguyssoftware.treasure2.lock.LockState; -import com.someguyssoftware.treasure2.loot.LootPoolShell; -import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; @@ -44,7 +44,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StringUtils; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraft.world.storage.loot.LootContext; diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java index aefdc0e70..f3eab9bbb 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/RareChestGenerator.java @@ -5,11 +5,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.Random; -import com.someguyssoftware.gottschcore.loot.LootTable; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; @@ -18,9 +16,7 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; -import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; -import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; /** diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java index 08bded4a7..aea2878d7 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/ScarceChestGenerator.java @@ -5,11 +5,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.Random; -import com.someguyssoftware.gottschcore.loot.LootTable; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; @@ -18,9 +16,7 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; -import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; -import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; /** diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java index 30aab4659..41599747c 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/SkullChestGenerator.java @@ -9,7 +9,7 @@ import java.util.Random; import java.util.function.Supplier; -import com.someguyssoftware.gottschcore.loot.LootTable; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; @@ -20,10 +20,8 @@ import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; -import com.someguyssoftware.treasure2.loot.LootTableShell; -import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2.SpecialLootTables; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; -import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; /** * diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java index a7b2d2be6..449ad6c17 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/UncommonChestGenerator.java @@ -5,20 +5,16 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.Random; -import com.someguyssoftware.gottschcore.loot.LootTable; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; import com.someguyssoftware.treasure2.enums.ChestGeneratorType; import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; -import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; -import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity.GenerationContext; /** * diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java index 5a06fe6e4..93d08644a 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/WitherChestGenerator.java @@ -8,6 +8,7 @@ import java.util.Random; import java.util.function.Supplier; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.treasure2.Treasure; @@ -21,8 +22,7 @@ import com.someguyssoftware.treasure2.item.LockItem; import com.someguyssoftware.treasure2.item.TreasureItems; import com.someguyssoftware.treasure2.lock.LockState; -import com.someguyssoftware.treasure2.loot.LootTableShell; -import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2.SpecialLootTables; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/com/someguyssoftware/treasure2/item/CoinItem.java b/src/main/java/com/someguyssoftware/treasure2/item/CoinItem.java index f8fe6e063..e85e4cc7c 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/CoinItem.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/CoinItem.java @@ -12,6 +12,8 @@ import com.someguyssoftware.gottschcore.cube.Cube; import com.someguyssoftware.gottschcore.item.ModItem; +import com.someguyssoftware.gottschcore.loot.LootPoolShell; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.positional.Coords; import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.gottschcore.random.RandomHelper; @@ -22,8 +24,6 @@ import com.someguyssoftware.treasure2.enums.Coins; import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.wish.IWishable; -import com.someguyssoftware.treasure2.loot.LootPoolShell; -import com.someguyssoftware.treasure2.loot.LootTableShell; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/com/someguyssoftware/treasure2/item/PearlItem.java b/src/main/java/com/someguyssoftware/treasure2/item/PearlItem.java index 020782d4d..75fb71caf 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/PearlItem.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/PearlItem.java @@ -12,6 +12,8 @@ import com.someguyssoftware.gottschcore.cube.Cube; import com.someguyssoftware.gottschcore.item.ModItem; +import com.someguyssoftware.gottschcore.loot.LootPoolShell; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.positional.Coords; import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.gottschcore.random.RandomHelper; @@ -21,9 +23,7 @@ import com.someguyssoftware.treasure2.enums.Pearls; import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.item.wish.IWishable; -import com.someguyssoftware.treasure2.loot.LootPoolShell; -import com.someguyssoftware.treasure2.loot.LootTableShell; -import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; +import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2.SpecialLootTables; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/com/someguyssoftware/treasure2/item/wish/IWishable.java b/src/main/java/com/someguyssoftware/treasure2/item/wish/IWishable.java index 51b9fc1de..4d05368d3 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/wish/IWishable.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/wish/IWishable.java @@ -7,10 +7,10 @@ import java.util.Optional; import java.util.Random; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.positional.ICoords; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.enums.Rarity; -import com.someguyssoftware.treasure2.loot.LootTableShell; import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster2; import com.someguyssoftware.treasure2.wish.IWishProvider; import com.someguyssoftware.treasure2.wish.IWishProviderFunction; diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/ILootTableMaster.java b/src/main/java/com/someguyssoftware/treasure2/loot/ILootTableMaster.java deleted file mode 100644 index ce6310a15..000000000 --- a/src/main/java/com/someguyssoftware/treasure2/loot/ILootTableMaster.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.someguyssoftware.treasure2.loot; - -import java.util.List; - -import com.someguyssoftware.gottschcore.mod.IMod; - -import net.minecraft.world.WorldServer; - -public interface ILootTableMaster { - - /** - * Call in WorldEvent.Load event handler. - * @param world - */ - void init(WorldServer world); - - void clear(); - - /** - * CREATES CONFIG FOLDERS/RESOURCES - on mod/manager creation - * Creates all the necessary folder and resources before actual loading of loot tables. - * Call in your @Mod class in preInt() or int(). - * - * @param resourceRootPath - * @param modID - */ - void buildAndExpose(String resourceRootPath, String modID, List locations); - - /** - * ONE STOP SHOP to tell where the resource is and to add to the maps and to register with minecraft - * - * Call in WorldEvent.Load event handler. - * Overide this method if you have a different cache mechanism. - * @param location - */ - void register(WorldServer world, String modID, List locations); - - IMod getMod(); - -} \ No newline at end of file diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootPoolShell.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootPoolShell.java deleted file mode 100644 index 000e54747..000000000 --- a/src/main/java/com/someguyssoftware/treasure2/loot/LootPoolShell.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * - */ -package com.someguyssoftware.treasure2.loot; - -import net.minecraft.world.storage.loot.RandomValueRange; - -/** - * @author Mark Gottschling on Dec 1, 2020 - * - */ -public class LootPoolShell { - private RandomValueRange rolls; - private RandomValueRange bonusRolls; - private String name; - - public LootPoolShell() {} - - public RandomValueRange getRolls() { - return rolls; - } - public void setRolls(RandomValueRange rolls) { - this.rolls = rolls; - } - public RandomValueRange getBonusRolls() { - return bonusRolls; - } - public void setBonusRolls(RandomValueRange bonusRolls) { - this.bonusRolls = bonusRolls; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - @Override - public String toString() { - return "LootPoolShell [rolls=" + rolls + ", bonusRolls=" + bonusRolls + ", name=" + name + "]"; - } -} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableCategory.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableCategory.java deleted file mode 100644 index ca5a1f286..000000000 --- a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableCategory.java +++ /dev/null @@ -1,18 +0,0 @@ -/** - * - */ -package com.someguyssoftware.treasure2.loot; - -/** - * @author Mark Gottschling on Dec 2, 2020 - * - */ -public enum LootTableCategory { - GENERAL, - ITEM, - ARMOR, - TOOL, - FOOD, - POTION, - UNKNOWN; -} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java deleted file mode 100644 index 3d813e455..000000000 --- a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableMaster2.java +++ /dev/null @@ -1,602 +0,0 @@ -/** - * - */ -package com.someguyssoftware.treasure2.loot; - -import static com.someguyssoftware.treasure2.Treasure.logger; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Random; -import java.util.stream.Stream; - -import org.apache.commons.io.FilenameUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import com.google.common.io.Resources; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonParseException; -import com.someguyssoftware.gottschcore.GottschCore; -import com.someguyssoftware.gottschcore.mod.IMod; -import com.someguyssoftware.gottschcore.version.BuildVersion; -import com.someguyssoftware.gottschcore.version.VersionChecker; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraft.world.storage.loot.LootContext; -import net.minecraft.world.storage.loot.LootTableManager; -import net.minecraft.world.storage.loot.RandomValueRange; - -/** - * @author Mark Gottschling on Dec 1, 2020 - * - */ -public class LootTableMaster2 implements ILootTableMaster { - public static Logger LOGGER = LogManager.getLogger(GottschCore.logger.getName()); - - public static final String LOOT_TABLES_FOLDER = "loot_tables"; - - private static final Gson GSON_INSTANCE = (new GsonBuilder()) - .registerTypeAdapter(RandomValueRange.class, new RandomValueRange.Serializer()).create(); - - private final IMod mod; - private File worldDataBaseFolder; - private LootContext context; - - /** - * - */ - public LootTableMaster2(IMod mod) { - this.mod = mod; - } - - /** - * - */ - public LootTableMaster2(IMod mod, File folder) { - this.mod = mod; - this.worldDataBaseFolder = folder; - } - - /** - * Call in WorldEvent.Load event handler. - * @param world - */ - @Override - public void init(WorldServer world) { - Path path = Paths.get(world.getSaveHandler().getWorldDirectory().getPath(), "data", "loot_tables"); - setWorldDataBaseFolder(path.toFile()); - this.context = new LootContext.Builder(world).build(); - } - - @Override - public void clear() { - - } - - /** - * CREATES CONFIG FOLDERS/RESOURCES - on mod/manager creation - * Creates all the necessary folder and resources before actual loading of loot tables. - * Call in your @Mod class in preInt() or int(). - * - * @param resourceRootPath - * @param modID - */ - @Override - public void buildAndExpose(String resourceRootPath, String modID, List locations) { - GottschCore.logger.debug("loot table folder locations -> {}", locations); - // create paths to custom loot tables if they don't exist - for (String location : locations) { - GottschCore.logger.debug("buildAndExpose location -> {}", location); - createLootTableFolder(modID, location); - exposeLootTable(resourceRootPath, modID, location); - } - } - - /** - * ONE STOP SHOP to tell where the resource is and to add to the maps and to register with minecraft - * - * Call in WorldEvent.Load event handler. - * Overide this method if you have a different cache mechanism. - * @param location - */ - @Override - public void register(WorldServer world, String modID, List locations) { - // TODO copy files from config location to world data location if not there already - -// for (String location : locations) { -// // get loot table files as ResourceLocations from the world data location -// List locs = getLootTablesResourceLocations(modID, location); -// } - - // TODO finish - } - - /** - * - * @param modID - * @param location - */ - protected void createLootTableFolder(String modID, String location) { - // ensure that the requried properties (modID) is not null - if (modID == null || modID.isEmpty()) { - modID = getMod().getId(); - } - - /* - * build a path to the specified location - * ie ../[CONFIG FOLDER]/[MODID]/[LOOT_TABLES]/[location] - */ - Path configPath = Paths.get(getMod().getConfig().getConfigFolder()); - Path folder = Paths.get(configPath.toString(), modID, LOOT_TABLES_FOLDER, ((location != null && !location.isEmpty()) ? /*(location + "/")*/location : "")).toAbsolutePath(); - - if (Files.notExists(folder)) { - GottschCore.logger.debug("loot tables folder \"{}\" will be created.", folder.toString()); - try { - Files.createDirectories(folder); - - } catch (IOException e) { - GottschCore.logger.warn("Unable to create loot tables folder \"{}\"", folder.toString()); - } - } - } - - /** - * - * @param modID - * @param location - */ - protected void createWorldDataLootTableFolder(String modID, String location) { - // ensure that the requried properties (modID) is not null - if (modID == null || modID.isEmpty()) { - modID = getMod().getId(); - } - - /* - * build a path to the specified location - * ie ../[WORLD DATA]/[LOOT_TABLES]/[MOD ID]/[location] - */ - Path worldDataFilePath = Paths.get(getWorldDataBaseFolder().toString(), modID, location).toAbsolutePath(); - - if (Files.notExists(worldDataFilePath)) { - GottschCore.logger.debug("loot tables folder \"{}\" will be created.", worldDataFilePath.toString()); - try { - Files.createDirectories(worldDataFilePath); - - } catch (IOException e) { - GottschCore.logger.warn("Unable to create world data loot tables folder \"{}\"", worldDataFilePath.toString()); - } - } - } - - /** - * - * @param modID - * @param location - */ - protected void exposeLootTable(String resourceRootPath, String modID, String location) { - // ensure that the requried properties are not null - if (modID == null || modID.isEmpty()) - modID = getMod().getId(); - location = (location != null && !location.equals("")) ? (location + "/") : ""; - - Stream walk = null; - FileSystem fs = getResourceAsFileSystem(resourceRootPath, modID, location); - if (fs == null) - return; - - try { - // get the base path of the resource - Path resourceBasePath = fs.getPath(resourceRootPath, modID, location); - Path folder = Paths.get(getMod().getConfig().getConfigFolder(), modID, LOOT_TABLES_FOLDER, location).toAbsolutePath(); - - boolean isFirst = true; - // proces all the files in the folder - walk = Files.walk(resourceBasePath, 1); - for (Iterator it = walk.iterator(); it.hasNext();) { - Path resourceFilePath = it.next(); - // String tableName = resourceFilePath.getFileName().toString(); - GottschCore.logger.debug("mod loot_table -> {}", resourceFilePath.toString()); - // check the first file, which is actually the given directory itself - if (isFirst) { - // create the file system folder if it doesn't exist - if (Files.notExists(folder)) { - createLootTableFolder(modID, location); - } - } else { - if (Files.isDirectory(resourceFilePath)) { - GottschCore.logger.debug("resource is a folder -> {}", resourceFilePath.toString()); - continue; - } - - // test if file exists on the file system - Path fileSystemFilePath = Paths.get(folder.toString(), resourceFilePath.getFileName().toString()).toAbsolutePath(); - GottschCore.logger.debug("config loot table path -> {}", fileSystemFilePath.toString()); - - if (Files.notExists(fileSystemFilePath)) { - // copy from resource/classpath to file path - copyResourceToFileSystem(resourceFilePath, fileSystemFilePath); - } - else { - boolean isCurrent = false; - try { - isCurrent = isFileSystemVersionCurrent(resourceFilePath, fileSystemFilePath); - } - catch(Exception e) { - GottschCore.logger.warn(e.getMessage(), e); - continue; - } - - GottschCore.logger.error("is file system (config) loot table current -> {}", isCurrent); - if (!isCurrent) { - Files.move( - fileSystemFilePath, - Paths.get(folder.toString(), resourceFilePath.getFileName().toString() + ".bak").toAbsolutePath(), - StandardCopyOption.REPLACE_EXISTING); - copyResourceToFileSystem(resourceFilePath, fileSystemFilePath); - } - } - } - isFirst = false; - } - } catch (Exception e) { - GottschCore.logger.error("error:", e); - } finally { - // close the stream - if (walk != null) { - walk.close(); - } - } - - // close the file system - if (fs != null && fs.isOpen()) { - try { - fs.close(); - } catch (IOException e) { - GottschCore.logger.debug("An error occurred attempting to close the FileSystem:", e); - } - } - } - - /** - * - * @param resourceFilePath - * @param fileSystemFilePath - */ - private void copyResourceToFileSystem(Path resourceFilePath, Path fileSystemFilePath) { - InputStream is = LootTableMaster2.class.getResourceAsStream(resourceFilePath.toString()); - try (FileOutputStream fos = new FileOutputStream(fileSystemFilePath.toFile())) { - byte[] buf = new byte[2048]; - int r; - while ((r = is.read(buf)) != -1) { - fos.write(buf, 0, r); - } - } catch (IOException e) { - GottschCore.logger.error("Error exposing resource to file system.", e); - } - } - - /** - * - * @param configFilePath - * @param worldDataFilePath - * @return - */ - protected boolean isWorldDataVersionCurrent(Path configFilePath, Path worldDataFilePath) { - boolean result = true; - GottschCore.logger.debug("Verifying the most current version for the world data loot table -> {} ...", worldDataFilePath.getFileName()); - - // config loot table - String configJson; - try { - configJson = com.google.common.io.Files.toString(configFilePath.toFile(), StandardCharsets.UTF_8); - } - catch (IOException e) { - LOGGER.warn("Couldn't load config loot table from {}", configFilePath.toString(), e); - return false; - } - - // world data config table - String worldDataJson; - try { - worldDataJson = com.google.common.io.Files.toString(worldDataFilePath.toFile(), StandardCharsets.UTF_8); - } - catch (IOException e) { - LOGGER.warn("Couldn't load world data loot table from {}", worldDataFilePath.toString(), e); - return false; - } - - LootTableShell configLootTable = loadLootTable(configJson); - LootTableShell worldDataLootTable = loadLootTable(worldDataJson); - - GottschCore.logger.debug("\n\t...config loot table -> {}\n\t...version -> {}\n\t...world data loot table -> {}\n\t...version -> {}", - configFilePath.toString(), - configLootTable.getVersion(), - worldDataFilePath.toString(), - worldDataLootTable.getVersion()); - - // compare versions - if (configLootTable != null && worldDataLootTable != null) { - BuildVersion configVersion = new BuildVersion(configLootTable.getVersion()); - BuildVersion worldDataVersion = new BuildVersion(worldDataLootTable.getVersion()); - result = VersionChecker.checkVersion(configVersion, worldDataVersion); // if 1st > 2nd, then false; - } - - // compare modified dates - if (result && configFilePath.toFile().lastModified() > worldDataFilePath.toFile().lastModified()) { - result = false; - } - return result; - } - - /** - * - * @param resourceFilePath - * @param fileSystemFilePath - * @return - * @throws Exception - */ - protected boolean isFileSystemVersionCurrent(Path resourceFilePath, Path fileSystemFilePath) throws Exception { - boolean result = true; - GottschCore.logger.debug("Verifying the most current version for the loot table -> {} ...", fileSystemFilePath.getFileName()); - - // file system loot table - can't load as a resource at this location - String configJson; - try { - configJson = com.google.common.io.Files.toString(fileSystemFilePath.toFile(), StandardCharsets.UTF_8); - } - catch (IOException e) { - LOGGER.warn("Couldn't load config loot table from {}", fileSystemFilePath.toString(), e); - return false; - } - LootTableShell fsLootTable = loadLootTable(configJson); - - // turn file path into a resource location - ResourceLocation loc = new ResourceLocation(getMod().getId(), resourceFilePath.toString().replace(".json", "")); - - // jar resource loot table - URL url = LootTableManager.class.getResource(resourceFilePath.toString()); - if (url == null) { - GottschCore.logger.debug("Unable to get resource -> {}", resourceFilePath.toString()); - return false; - } - - String resourceJson; - try { - resourceJson = Resources.toString(url, StandardCharsets.UTF_8); - } catch (IOException e) { - // TODO make custom exception - throw new Exception(String.format("Couldn't load loot table %s from %s", resourceFilePath, url), e); - } - - LootTableShell resourceLootTable = null; - try { - resourceLootTable = loadLootTable(resourceJson); - } catch (IllegalArgumentException | JsonParseException e) { - // TODO make custom exception - throw new Exception(String.format("Couldn't load loot table %s from %s", resourceFilePath, url), e); - } - - GottschCore.logger.debug("\n\t...file system loot table -> {}\n\t...version -> {}\n\t...resource loot table -> {}\n\t...version -> {}", - fileSystemFilePath.toString(), - fsLootTable.getVersion(), - loc.toString(), - resourceLootTable.getVersion()); - - // compare versions - if (resourceLootTable != null && fsLootTable != null) { - BuildVersion resourceVersion = new BuildVersion(resourceLootTable.getVersion()); - BuildVersion fsVersion = new BuildVersion(fsLootTable.getVersion()); - result = VersionChecker.checkVersion(resourceVersion, fsVersion); // if 1st > 2nd, then false; - } - return result; - } - - /** - * - * @param modID - * @param location - * @return - */ - protected FileSystem getResourceAsFileSystem(String resourceRootPath, String modID, String location) { - FileSystem fs = null; - Map env = new HashMap<>(); - URI uri = null; - - // get the asset resource folder that is unique to this mod - resourceRootPath = "/" + resourceRootPath.replaceAll("^/|/$", "") + "/"; - URL url = GottschCore.class.getResource(resourceRootPath + modID + "/" + location); - if (url == null) { - GottschCore.logger.error("Unable to locate resource {}", resourceRootPath + modID + "/" + location); - return null; - } - - // convert to a uri - try { - uri = url.toURI(); - } catch (URISyntaxException e) { - GottschCore.logger.error("An error occurred during loot table processing:", e); - return null; - } - - // split the uri into 2 parts - jar path and folder path within jar - String[] array = uri.toString().split("!"); - try { - fs = FileSystems.newFileSystem(URI.create(array[0]), env); - } catch (IOException e) { - GottschCore.logger.error("An error occurred during loot table processing:", e); - return null; - } - - return fs; - } - - /** - * Gather all json files at location as a ResourceLocation list. - * @param modIDIn - * @param locationIn - * @return - */ - public List getLootTablesResourceLocations(String modIDIn, String locationIn) { - // ensure that the requried properties are not null - final String modID = (modIDIn == null || modIDIn.isEmpty()) ? getMod().getId() : modIDIn; - final String location= (locationIn != null && !locationIn.equals("")) ? (locationIn + "/") : ""; - - List locs = new ArrayList<>(); - Path path = Paths.get(getWorldDataBaseFolder().getPath(), modID, location).toAbsolutePath(); - - GottschCore.logger.debug("Path to world data loot table -> {}", path.toString()); - // check if path/folder exists - if (Files.notExists(path)) { - GottschCore.logger.debug("Unable to locate -> {}", path.toString()); - return locs; - } - - try { - Files.walk(path).filter(Files::isRegularFile).forEach(f -> { - GottschCore.logger.debug("World data loot table file -> {}", f.toAbsolutePath().toString()); - /* - * only add .json files. (not .bak or anything else) - */ - if (FilenameUtils.getExtension(f.getFileName().toString()).equals("json")) { - ResourceLocation loc = - new ResourceLocation(modID + ":" + location + f.getFileName().toString().replace(".json", "")); - GottschCore.logger.debug("Resource location -> {}", loc); - locs.add(loc); - } - }); - } catch (IOException e) { - GottschCore.logger.error("Error processing custom loot table:", e); - } - return locs; - } - - /** - * - * @param json - * @return - */ - public LootTableShell loadLootTable(String json) throws IllegalArgumentException, JsonParseException { - return GSON_INSTANCE.fromJson(json, LootTableShell.class); - } - - /** - * TODO change File path to Path path and File baseFolder to Path baseFolder - * @param resource - * @return - */ - public Optional loadLootTable(File folder, ResourceLocation resource) { - - if (getWorldDataBaseFolder() == null) { - return Optional.empty(); - } - else { -// File lootTableFile = new File(new File(getWorldDataBaseFolder(), resource.getResourceDomain()), -// resource.getResourcePath() + ".json"); - - File lootTableFile = Paths.get(folder.getPath(), resource.getResourceDomain(), resource.getResourcePath() + ".json").toFile(); - LOGGER.debug("Attempting to load loot table {} from {}", resource, lootTableFile); - - if (lootTableFile.exists()) { - if (lootTableFile.isFile()) { - String json; - try { - json = com.google.common.io.Files.toString(lootTableFile, StandardCharsets.UTF_8); - } - catch (IOException e) { - LOGGER.warn("Couldn't load loot table {} from {}", resource, lootTableFile, e); - return Optional.empty(); - } - - try { - return Optional.of(loadLootTable(json)); - } - catch (IllegalArgumentException | JsonParseException e) { - LOGGER.error("Couldn't load loot table {} from {}", resource, lootTableFile, e); - return Optional.empty(); - } - } - else { - LOGGER.warn("Expected to find loot table {} at {} but it was a folder.", resource, lootTableFile); - return Optional.empty(); - } - } - else { - LOGGER.warn("Expected to find loot table {} at {} but it doesn't exist.", resource, lootTableFile); - return Optional.empty(); - } - } - } - - /** - * - * @param world - * @param random - * @param list - * @param lootContext - * @return - */ - public List getInjectedLootItems(World world, Random random, List list, - LootContext lootContext) { - List itemStacks = new ArrayList<>(); - - for (LootTableShell injectLootTableShell : list) { - logger.debug("injectable resource -> {}", injectLootTableShell.getResourceLocation()); - // get the vanilla managed loot table - net.minecraft.world.storage.loot.LootTable injectLootTable = world.getLootTableManager().getLootTableFromLocation(injectLootTableShell.getResourceLocation()); - if (injectLootTable != null) { - // add loot from tables to itemStacks - itemStacks.addAll(injectLootTable.generateLootForPools(random, lootContext)); - logger.debug("size of item stacks after inject -> {}", itemStacks.size()); - } - } - return itemStacks; - } - - public File getWorldDataBaseFolder() { - return worldDataBaseFolder; - } - - public void setWorldDataBaseFolder(File baseFolder) { - this.worldDataBaseFolder = baseFolder; - } - - @Override - public IMod getMod() { - return mod; - } - - public Gson getGsonInstance() { - return GSON_INSTANCE; - } - - public LootContext getContext() { - return context; - } - - public void setContext(LootContext context) { - this.context = context; - } -} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java b/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java deleted file mode 100644 index e65102f65..000000000 --- a/src/main/java/com/someguyssoftware/treasure2/loot/LootTableShell.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * - */ -package com.someguyssoftware.treasure2.loot; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.util.ResourceLocation; - -/** - * @author Mark Gottschling on Dec 1, 2020 - * - */ -public class LootTableShell { - // currently, this class is not serialized by other serializers so transient is safe to use for Gson - private transient ResourceLocation resourceLocation; - private String version; - private String category; - private List categories; - private String rarity; - private List pools; - - public LootTableShell() {} - - public List getPools() { - if (pools == null) { - pools = new ArrayList<>(); - } - return pools; - } - - public void setPools(List pools) { - this.pools = pools; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public List getCategories() { - if (categories == null) { - categories = new ArrayList(); - if (category != null && !category.isEmpty()) { - categories.add(category); - } - } - return categories; - } - - public void setCategories(List categories) { - this.categories = categories; - } - - @Override - public String toString() { - return "LootTableShell [resourceLocation=" + resourceLocation + ", version=" + version + ", category=" - + category + ", categories=" + categories + ", rarity=" + rarity + "]"; - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public ResourceLocation getResourceLocation() { - return resourceLocation; - } - - public void setResourceLocation(ResourceLocation resourceLocation) { - this.resourceLocation = resourceLocation; - } - - public String getRarity() { - return rarity; - } - - public void setRarity(String rarity) { - this.rarity = rarity; - } -} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java deleted file mode 100644 index 9a344c1f8..000000000 --- a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster.java +++ /dev/null @@ -1,249 +0,0 @@ -/** - * - */ -package com.someguyssoftware.treasure2.loot; - -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import com.google.common.collect.HashBasedTable; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Table; -import com.google.common.io.Files; -import com.someguyssoftware.gottschcore.loot.LootTable; -import com.someguyssoftware.gottschcore.loot.LootTableManager; -import com.someguyssoftware.gottschcore.loot.LootTableMaster; -import com.someguyssoftware.gottschcore.mod.IMod; -import com.someguyssoftware.treasure2.Treasure; -import com.someguyssoftware.treasure2.config.TreasureConfig; -import com.someguyssoftware.treasure2.enums.Rarity; - -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.Loader; - -/** - * @author Mark Gottschling on Jul 4, 2019 - * - */ -public class TreasureLootTableMaster extends LootTableMaster { - private static final String CUSTOM_LOOT_TABLES_RESOURCE_PATH = "/loot_tables/"; - private static final String CUSTOM_LOOT_TABLES_PATH = "loot_tables"; - - public static final String CUSTOM_LOOT_TABLE_KEY = "CUSTOM"; - - /* - * - */ - private final Map SPECIAL_LOOT_TABLES_MAP = new HashMap<>(); - - /* - * Guava Table of LootTable ResourceLocations based on LootTableManager-key and Rarity - */ - private final Table> CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE = HashBasedTable.create(); - - /* - * Guava Table of LootTables based on LootTableManager-key and Rarity - */ - private final Table> CHEST_LOOT_TABLES_TABLE = HashBasedTable.create(); - - /* - * list of special loot table locations - */ - private static final List SPECIAL_CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( - "chests/special" - ); - - /* - * relative location of chest loot tables - in resource path or file system - */ - private static final List CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( - "chests/common", - "chests/uncommon", - "chests/scarce", - "chests/rare", - "chests/epic" - ); - - /* - * relative location of other loot tables - in resource path or file system - */ - private static final List NON_CHEST_LOOT_TABLE_FOLDER_LOCATIONS = ImmutableList.of( - "treasure", - "armor", - "food", - "items", - "potions", - "tools" - ); - - /** - * @param mod - * @param resourcePath - * @param folderName - */ - public TreasureLootTableMaster(IMod mod, String resourcePath, String folderName) { - super(mod, resourcePath, folderName); - -// if (TreasureConfig.MOD.enableDefaultLootTablesCheck) { -// buildAndExpose(Treasure.MODID); -// for (String foreignModID : TreasureConfig.FOREIGN_MODS.enableForeignModIDs) { -// if (Loader.isModLoaded(foreignModID)) { -// buildAndExpose(foreignModID); -// } -// } -// } -// -// // initialize the maps -// for (Rarity r : Rarity.values()) { -// CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.put(CUSTOM_LOOT_TABLE_KEY, r, new ArrayList()); -// CHEST_LOOT_TABLES_TABLE.put(CUSTOM_LOOT_TABLE_KEY, r, new ArrayList()); -// } - } - - /** - * - */ - public void clear() { - super.getLootTablesMap().clear(); - super.getLootTablesResourceLocationMap().clear(); - CHEST_LOOT_TABLES_TABLE.clear(); - CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.clear(); - SPECIAL_LOOT_TABLES_MAP.clear(); - } - - /** - * - * @param modID - */ - private void buildAndExpose(String modID) { - buildAndExpose(CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, CHEST_LOOT_TABLE_FOLDER_LOCATIONS); - buildAndExpose(CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, NON_CHEST_LOOT_TABLE_FOLDER_LOCATIONS); - buildAndExpose(CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, SPECIAL_CHEST_LOOT_TABLE_FOLDER_LOCATIONS); - } - - /** - * Call in WorldEvent.Load event handler. - * Overide this method if you have a different cache mechanism. - * @param modIDIn - * @param location - */ - public void register(String modID) { - /* - * register special loot tables - */ - for (String location : SPECIAL_CHEST_LOOT_TABLE_FOLDER_LOCATIONS) { - List specialLocations = getLootTablesResourceLocations(modID, location); - - // load each ResourceLocation as LootTable and map it. - for (ResourceLocation loc : specialLocations) { - Path path = Paths.get(loc.getResourcePath()); - // create loot table - LootTable lootTable = getLootTableManager().getLootTableFromLocation(loc); - // add to map - SpecialLootTables specialLootTables = SpecialLootTables.valueOf(Files.getNameWithoutExtension(path.getName(path.getNameCount()-1).toString().toUpperCase())); - // add to map - SPECIAL_LOOT_TABLES_MAP.put(specialLootTables, lootTable); - } - } - for (String location : CHEST_LOOT_TABLE_FOLDER_LOCATIONS) { - // get loot table files as ResourceLocations from the file system location - List locs = getLootTablesResourceLocations(modID, location); - - // load each ResourceLocation as LootTable and map it. - for (ResourceLocation loc : locs) { - Path path = Paths.get(loc.getResourcePath()); - Treasure.logger.debug("path to resource loc -> {}", path.toString()); - // map the loot table resource location - Rarity key = Rarity.valueOf(path.getName(path.getNameCount()-2).toString().toUpperCase()); - // add to resourcemap - CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(loc); - // create loot table - LootTable lootTable = getLootTableManager().getLootTableFromLocation(loc); - // add loot table to map - CHEST_LOOT_TABLES_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(lootTable); - Treasure.logger.debug("tabling loot table: {} {} -> {}", CUSTOM_LOOT_TABLE_KEY, key, loc); - } - } - } - - /** - * - * @param rarity - * @return - */ - public List getLootTableByRarity(Rarity rarity) { - // get all loot tables by column key - List tables = new ArrayList<>(); - Map> mapOfLootTables = CHEST_LOOT_TABLES_TABLE.column(rarity); - // convert to a single list - for(Entry> n : mapOfLootTables.entrySet()) { - Treasure.logger.debug("Adding table entry to loot table list -> {} {}: size {}", rarity, n.getKey(), n.getValue().size()); - tables.addAll(n.getValue()); - } - return tables; - } - - /** - * - * @param rarity - * @return - */ - public List getLootTableResourceByRarity(Rarity rarity) { - // get all loot tables by column key - List tables = new ArrayList<>(); - Map> mapOfLootTableResourceLocations = CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.column(rarity); - // convert to a single list - for(Entry> n : mapOfLootTableResourceLocations.entrySet()) { -// Treasure.logger.debug("Adding table resource location entry to loot table resource location list -> {} {}: size {}", rarity, n.getKey(), n.getValue().size()); - tables.addAll(n.getValue()); - } - return tables; - } - - /** - * - * @param tableEnum - * @return - */ - public LootTable getSpecialLootTable(SpecialLootTables table) { - LootTable lootTable = SPECIAL_LOOT_TABLES_MAP.get(table); - return lootTable; - } - - /** - * - * @return - */ - public Table> getChestLootTablesTable() { - return CHEST_LOOT_TABLES_TABLE; - } - - /** - * - */ - public LootTableManager getLootTableManager() { - return super.getLootTableManager(); - } - - /* - * Enum of special loot tables (not necessarily chests) - */ - public enum SpecialLootTables { - WITHER_CHEST, - SKULL_CHEST, - GOLD_SKULL_CHEST, - CRYSTAL_SKULL_CHEST, - CAULDRON_CHEST, - CLAM_CHEST, - OYSTER_CHEST, - SILVER_WELL, - GOLD_WELL, - WHITE_PEARL_WELL, - BLACK_PEARL_WELL - } -} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java index d8af53c48..3d2b02777 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java @@ -27,9 +27,10 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Table; import com.someguyssoftware.gottschcore.mod.IMod; +import com.someguyssoftware.gottschcore.loot.LootTableMaster2; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.enums.Rarity; -import com.someguyssoftware.treasure2.loot.TreasureLootTableMaster.SpecialLootTables; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StringUtils; @@ -441,4 +442,21 @@ public LootTableShell getSpecialLootTable(SpecialLootTables table) { public Rarity getEffectiveRarity(LootTableShell lootTableShell, Rarity defaultRarity) { return !StringUtils.isNullOrEmpty(lootTableShell.getRarity()) ? Rarity.getByValue(lootTableShell.getRarity().toLowerCase()) : defaultRarity; } + + /* + * Enum of special loot tables (not necessarily chests) + */ + public enum SpecialLootTables { + WITHER_CHEST, + SKULL_CHEST, + GOLD_SKULL_CHEST, + CRYSTAL_SKULL_CHEST, + CAULDRON_CHEST, + CLAM_CHEST, + OYSTER_CHEST, + SILVER_WELL, + GOLD_WELL, + WHITE_PEARL_WELL, + BLACK_PEARL_WELL + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableRegistry.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableRegistry.java index a0adffcef..7d9f05952 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableRegistry.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableRegistry.java @@ -3,6 +3,7 @@ */ package com.someguyssoftware.treasure2.loot; +import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; @@ -15,14 +16,18 @@ * */ public final class TreasureLootTableRegistry { - + private static final List registeredMods = new ArrayList<>(); + /** * * @param modID */ public static void register(final String modID) { - buildAndExpose(modID); - Treasure.LOOT_TABLE_MASTER.register(modID); + if (!registeredMods.contains(modID)) { + buildAndExpose(modID); + Treasure.LOOT_TABLE_MASTER.register(modID); + registeredMods.add(modID); + } } /** @@ -31,10 +36,12 @@ public static void register(final String modID) { * @param customFolders */ public static void register(final String modID, final @Nullable List customFolders) { - if (customFolders != null && !customFolders.isEmpty()) { - Treasure.LOOT_TABLE_MASTER.buildAndExpose(TreasureLootTableMaster2.CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, customFolders); + if (!registeredMods.contains(modID)) { + if (customFolders != null && !customFolders.isEmpty()) { + Treasure.LOOT_TABLE_MASTER.buildAndExpose(TreasureLootTableMaster2.CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, customFolders); + } + register(modID); } - register(modID); } /** @@ -47,4 +54,8 @@ private static void buildAndExpose(String modID) { Treasure.LOOT_TABLE_MASTER.buildAndExpose(TreasureLootTableMaster2.CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, TreasureLootTableMaster2.POOL_LOOT_TABLE_FOLDER_LOCATIONS); Treasure.LOOT_TABLE_MASTER.buildAndExpose(TreasureLootTableMaster2.CUSTOM_LOOT_TABLES_RESOURCE_PATH, modID, TreasureLootTableMaster2.INJECT_LOOT_TABLE_FOLDER_LOCATIONS); } + + public static List getRegisteredmods() { + return registeredMods; + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly.java b/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly.java index 63da6d5f9..d61e46787 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly.java @@ -19,9 +19,6 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; -import com.someguyssoftware.gottschcore.loot.LootContext; -import com.someguyssoftware.gottschcore.loot.conditions.LootCondition; -import com.someguyssoftware.gottschcore.loot.functions.LootFunction; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.capability.CharmCapabilityProvider; import com.someguyssoftware.treasure2.capability.ICharmCapability; @@ -35,6 +32,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.JsonUtils; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.conditions.LootCondition; +import net.minecraft.world.storage.loot.functions.LootFunction; /** * @author Mark Gottschling on May 1, 2020 diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly2.java b/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly2.java deleted file mode 100644 index dcf2ed7c4..000000000 --- a/src/main/java/com/someguyssoftware/treasure2/loot/function/CharmRandomly2.java +++ /dev/null @@ -1,153 +0,0 @@ -/** - * - */ -package com.someguyssoftware.treasure2.loot.function; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import javax.annotation.Nullable; - -import com.google.common.collect.Lists; -import com.google.gson.JsonArray; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.someguyssoftware.treasure2.Treasure; -import com.someguyssoftware.treasure2.capability.CharmCapabilityProvider; -import com.someguyssoftware.treasure2.capability.ICharmCapability; -import com.someguyssoftware.treasure2.item.charm.CharmLevel; -import com.someguyssoftware.treasure2.item.charm.CharmStateFactory; -import com.someguyssoftware.treasure2.item.charm.CharmType; -import com.someguyssoftware.treasure2.item.charm.ICharm; -import com.someguyssoftware.treasure2.item.charm.ICharmState; -import com.someguyssoftware.treasure2.item.charm.TreasureCharms; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.JsonUtils; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.storage.loot.LootContext; -import net.minecraft.world.storage.loot.conditions.LootCondition; -import net.minecraft.world.storage.loot.functions.LootFunction; - -/** - * @author Mark Gottschling on May 1, 2020 - * @param - * - */ -public class CharmRandomly2 extends LootFunction { - private List charms; - - /** - * - * @param conditions - * @param charms - */ - public CharmRandomly2(LootCondition[] conditions, @Nullable List charms) { - super(conditions); - this.charms = charms == null ? Collections.emptyList() : charms; - } - - @Override - public ItemStack apply(ItemStack stack, Random rand, LootContext context) { - ICharm charm = null; - - // ensure that the stack has charm capabilities - if (stack.hasCapability(CharmCapabilityProvider.CHARM_CAPABILITY, null)) { - ICharmCapability provider = stack.getCapability(CharmCapabilityProvider.CHARM_CAPABILITY, null); - List charmStates = provider.getCharmStates(); - - if (this.charms.isEmpty()) { - List tempCharms = new ArrayList<>(); - // if charms list is empty, create a default list of minor charms - for (ICharm c : TreasureCharms.REGISTRY.values()) { - if (c.getCharmLevel() == CharmLevel.LEVEL1 || c.getCharmLevel() == CharmLevel.LEVEL2) { - tempCharms.add(c); - } - } - if (!tempCharms.isEmpty()) { - // select a charm randomly - charm = tempCharms.get(rand.nextInt(tempCharms.size())); - } - } - else { - // select a charm randomly - charm =this.charms.get(rand.nextInt(this.charms.size())); - Treasure.logger.debug("selected charm for item -> {}", charm.getName()); - } - if (charm != null) { - // ensure that the item doesn't already have the same charm or same type or exceeded the maximum charms. - boolean hasCharm = false; - for (ICharmState state : charmStates) { - if (state.getCharm().getCharmType() == charm.getCharmType() || - state.getCharm().getName().equals(charm.getName())) { - hasCharm = true; - break; - } - } - if (!hasCharm) { - charmStates.add(CharmStateFactory.createCharmState(charm)); - } - } - } - return stack; - } - - /** - * - * @author Mark Gottschling on May 1, 2020 - * - */ - public static class Serializer extends LootFunction.Serializer { - public Serializer() { - super(new ResourceLocation("treasure2:charm_randomly2"), CharmRandomly2.class); - } - - /** - * - */ - public void serialize(JsonObject json, CharmRandomly2 value, JsonSerializationContext context) { - if (!value.charms.isEmpty()) { - JsonArray jsonArray = new JsonArray(); - for (ICharm charm : value.charms) { - jsonArray.add(new JsonPrimitive(charm.getName())); - } - json.add("charms", jsonArray); - } - } - - /** - * - */ - public CharmRandomly2 deserialize(JsonObject json, JsonDeserializationContext deserializationContext, - LootCondition[] conditionsIn) { - Map charmsByType = new HashMap<>(10); - List list = Lists.newArrayList(); - - if (json.has("charms")) { - for (JsonElement element : JsonUtils.getJsonArray(json, "charms")) { - String charmName = JsonUtils.getString(element, "charm"); - ICharm charm = TreasureCharms.REGISTRY.get(charmName); - - if (charm == null) { - Treasure.logger.warn("Unknown charm '{}'", charmName); - } - - // add to the map - if (!charmsByType.containsKey(charm.getCharmType())) { - charmsByType.put(charm.getCharmType(), charm); - // add to the list of charms - list.add(charm); - } - } - } - return new CharmRandomly2(conditionsIn, list); - } - } -} diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms.java b/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms.java index eab95f8f9..9a1937d10 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms.java @@ -19,13 +19,12 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; -import com.someguyssoftware.gottschcore.loot.LootContext; -import com.someguyssoftware.gottschcore.loot.conditions.LootCondition; -import com.someguyssoftware.gottschcore.loot.functions.LootFunction; + import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.capability.CharmCapabilityProvider; import com.someguyssoftware.treasure2.capability.ICharmCapability; import com.someguyssoftware.treasure2.item.charm.CharmLevel; +import com.someguyssoftware.treasure2.item.charm.CharmState; import com.someguyssoftware.treasure2.item.charm.CharmStateFactory; import com.someguyssoftware.treasure2.item.charm.CharmType; import com.someguyssoftware.treasure2.item.charm.ICharm; @@ -35,6 +34,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.JsonUtils; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.conditions.LootCondition; +import net.minecraft.world.storage.loot.functions.LootFunction; /** * diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms2.java b/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms2.java deleted file mode 100644 index 7b26e9c0e..000000000 --- a/src/main/java/com/someguyssoftware/treasure2/loot/function/SetCharms2.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * - */ -package com.someguyssoftware.treasure2.loot.function; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import javax.annotation.Nullable; - -import com.google.common.collect.Lists; -import com.google.gson.JsonArray; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; - -import com.someguyssoftware.treasure2.Treasure; -import com.someguyssoftware.treasure2.capability.CharmCapabilityProvider; -import com.someguyssoftware.treasure2.capability.ICharmCapability; -import com.someguyssoftware.treasure2.item.charm.CharmLevel; -import com.someguyssoftware.treasure2.item.charm.CharmState; -import com.someguyssoftware.treasure2.item.charm.CharmStateFactory; -import com.someguyssoftware.treasure2.item.charm.CharmType; -import com.someguyssoftware.treasure2.item.charm.ICharm; -import com.someguyssoftware.treasure2.item.charm.ICharmState; -import com.someguyssoftware.treasure2.item.charm.TreasureCharms; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.JsonUtils; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.storage.loot.LootContext; -import net.minecraft.world.storage.loot.conditions.LootCondition; -import net.minecraft.world.storage.loot.functions.LootFunction; - -/** - * - * @author Mark Gottschling on May 2, 2020 - * - */ -public class SetCharms2 extends LootFunction { - private List charms; - - /** - * - * @param conditions - * @param charms - */ - public SetCharms2(LootCondition[] conditions, @Nullable List charms) { - super(conditions); - this.charms = charms == null ? Collections.emptyList() : charms; - } - - @Override - public ItemStack apply(ItemStack stack, Random rand, LootContext context) { - - // ensure that the stack has charm capabilities - if (stack.hasCapability(CharmCapabilityProvider.CHARM_CAPABILITY, null)) { - ICharmCapability provider = stack.getCapability(CharmCapabilityProvider.CHARM_CAPABILITY, null); - List charmStates = provider.getCharmStates(); - - if (!this.charms.isEmpty()) { - for (ICharm charm : charms) { - // ensure that the item doesn't already have the same charm or same type or exceeded the maximum charms. - boolean hasCharm = false; - for (ICharmState state : charmStates) { - if (state.getCharm().getCharmType() == charm.getCharmType() || - state.getCharm().getName().equals(charm.getName())) { - Treasure.logger.debug("item already has charm -> {}", charm.getName()); - hasCharm = true; - break; - } - } - if (!hasCharm) { - Treasure.logger.debug("giving item charm -> {}", charm.getName()); - charmStates.add(CharmStateFactory.createCharmState(charm)); - } - } - } - else { - // randomly add a charm (in case loot table is misconfigured) - List tempCharms = new ArrayList<>(); - // if charms list is empty, create a default list of minor charms - for (ICharm c : TreasureCharms.REGISTRY.values()) { - if (c.getCharmLevel() == CharmLevel.LEVEL1 || c.getCharmLevel() == CharmLevel.LEVEL2) { - tempCharms.add(c); - } - } - if (!tempCharms.isEmpty()) { - // select a charm randomly - ICharm charm = tempCharms.get(rand.nextInt(tempCharms.size())); - Treasure.logger.debug("giving item a random charm -> {}", charm.getName()); - charmStates.add(CharmStateFactory.createCharmState(charm)); - } - } - } - return stack; - } - - /** - * - * @author Mark Gottschling on May 2, 2020 - * - */ - public static class Serializer extends LootFunction.Serializer { - public Serializer() { - super(new ResourceLocation("treasure2:set_charms2"), SetCharms2.class); - } - - /** - * - */ - public void serialize(JsonObject json, SetCharms2 value, JsonSerializationContext context) { - if (!value.charms.isEmpty()) { - JsonArray jsonArray = new JsonArray(); - for (ICharm charm : value.charms) { - jsonArray.add(new JsonPrimitive(charm.getName())); - } - json.add("charms", jsonArray); - } - } - - /** - * - */ - public SetCharms2 deserialize(JsonObject json, JsonDeserializationContext deserializationContext, - LootCondition[] conditionsIn) { - Map charmsByType = new HashMap<>(10); - List list = Lists.newArrayList(); - - if (json.has("charms")) { - for (JsonElement element : JsonUtils.getJsonArray(json, "charms")) { - String charmName = JsonUtils.getString(element, "charm"); - ICharm charm = TreasureCharms.REGISTRY.get(charmName); - - if (charm == null) { - Treasure.logger.warn("Unknown charm '{}'", charmName); - System.out.println("Unknown charm '" + charmName + "'"); - } - - // add to the map - if (!charmsByType.containsKey(charm.getCharmType())) { - charmsByType.put(charm.getCharmType(), charm); - // add to the list of charms - list.add(charm); - Treasure.logger.debug("adding charm to charm list -> {}", charm.getName()); - } - } - } - return new SetCharms2(conditionsIn, list); - } - } -} diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/common.json b/src/main/resources/loot_tables/treasure2/pools/treasure/common.json index c8dcd8865..5496b147b 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/common.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/common.json @@ -102,7 +102,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "lesser_healing", "durable_shielding" diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json index 936d0df3e..a73762bf7 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/epic_charms.json @@ -42,7 +42,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "greater_healing", "hardened_shielding", @@ -52,7 +52,7 @@ ] }, { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "greater_healing", "hardened_shielding", @@ -76,7 +76,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "greater_healing", "hardened_shielding", @@ -87,7 +87,7 @@ ] }, { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "grand_healing", "powerful_shielding", diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json index 26c01831c..f93ffde6a 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/rare_charms.json @@ -18,7 +18,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "greater_healing", "hardened_shielding", @@ -28,7 +28,7 @@ ] }, { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "greater_healing", "hardened_shielding", @@ -53,7 +53,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "grand_healing", "powerful_shielding", diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json index 993e063e4..0905e73d5 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/scarce_charms.json @@ -18,7 +18,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "lesser_healing", "durable_shielding", @@ -42,7 +42,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "lesser_healing", "durable_shielding", @@ -52,7 +52,7 @@ ] }, { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "healing", "stout_shielding", @@ -76,7 +76,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "greater_healing", "hardened_shielding", diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json b/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json index db7ad79a6..096f9e5a8 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon_charms.json @@ -18,7 +18,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "lesser_healing", "durable_shielding" @@ -39,7 +39,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "lesser_healing", "durable_shielding", @@ -62,7 +62,7 @@ ], "functions": [ { - "function": "treasure2:charm_randomly2", + "function": "treasure2:charm_randomly", "charms": [ "healing", "stout_shielding" From ef99156504ab14f2bd91bb4f764eeef2618c3ac8 Mon Sep 17 00:00:00 2001 From: gottsch Date: Fri, 11 Dec 2020 17:25:53 -0500 Subject: [PATCH 17/20] fixed BoundSoulEntity - Morph bug. updated SpawnChestCommand with additional arguments --- gradle.properties | 2 +- .../treasure2/block/TreasureBlocks.java | 1 - .../treasure2/block/TreasureChestBlock.java | 5 +- .../treasure2/command/SpawnChestCommand.java | 267 +++++++++++++----- .../entity/monster/BoundSoulEntity.java | 12 +- .../treasure2/enums/ChestGeneratorType.java | 14 +- .../generator/chest/IChestGenerator.java | 5 - .../loot/TreasureLootTableMaster2.java | 13 +- 8 files changed, 231 insertions(+), 88 deletions(-) diff --git a/gradle.properties b/gradle.properties index 4b9b9d309..7d10c2de2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,4 +18,4 @@ patchouli_version=1.0-20.108 # paths dest_folder=E:/Minecraft/mods/1.12.2/ -dest_server_folder=F:/Minecraft Server/mods/ +dest_server_folder=F:/Minecraft Server 1.12.2/mods/ diff --git a/src/main/java/com/someguyssoftware/treasure2/block/TreasureBlocks.java b/src/main/java/com/someguyssoftware/treasure2/block/TreasureBlocks.java index f18a50931..7cea04f39 100644 --- a/src/main/java/com/someguyssoftware/treasure2/block/TreasureBlocks.java +++ b/src/main/java/com/someguyssoftware/treasure2/block/TreasureBlocks.java @@ -503,7 +503,6 @@ public static void registerBlocks(final RegistryEvent.Register event) { final Block[] blocks = { WOOD_CHEST, CRATE_CHEST, MOLDY_CRATE_CHEST, IRONBOUND_CHEST, PIRATE_CHEST, IRON_STRONGBOX, GOLD_STRONGBOX, SAFE, DREAD_PIRATE_CHEST, - // WHALE_BONE_PIRATE_CHEST, COMPRESSOR_CHEST, SPIDER_CHEST, VIKING_CHEST, diff --git a/src/main/java/com/someguyssoftware/treasure2/block/TreasureChestBlock.java b/src/main/java/com/someguyssoftware/treasure2/block/TreasureChestBlock.java index 8181bbdf2..b97e004a6 100644 --- a/src/main/java/com/someguyssoftware/treasure2/block/TreasureChestBlock.java +++ b/src/main/java/com/someguyssoftware/treasure2/block/TreasureChestBlock.java @@ -130,9 +130,8 @@ public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, Enti Direction direction = Direction.fromFacing(placer.getHorizontalFacing().getOpposite()); // rotate the lock states - shouldUpdate = rotateLockStates(worldIn, pos, oldPersistedChestDirection.getRotation(direction)); // old -> - // Direction.NORTH - // // + shouldUpdate = rotateLockStates(worldIn, pos, oldPersistedChestDirection.getRotation(direction)); + // old -> Direction.NORTH // Treasure.logger.debug("New lock states ->"); // for (LockState ls : tcte.getLockStates()) { diff --git a/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java b/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java index 76cd6d18a..f21cc52fd 100644 --- a/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java +++ b/src/main/java/com/someguyssoftware/treasure2/command/SpawnChestCommand.java @@ -3,11 +3,17 @@ */ package com.someguyssoftware.treasure2.command; +import static com.someguyssoftware.treasure2.Treasure.logger; +import com.someguyssoftware.treasure2.block.TreasureBlocks; + + import java.util.Arrays; import java.util.Collections; +import java.util.EnumSet; import java.util.List; import java.util.Optional; import java.util.Random; +import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -16,15 +22,19 @@ import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.Options; +import com.someguyssoftware.gottschcore.enums.Direction; import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.block.AbstractChestBlock; +import com.someguyssoftware.treasure2.block.TreasureChestBlock; +import com.someguyssoftware.treasure2.enums.ChestGeneratorType; import com.someguyssoftware.treasure2.enums.Rarity; import com.someguyssoftware.treasure2.enums.WorldGeneratorType; import com.someguyssoftware.treasure2.generator.chest.IChestGenerator; import com.someguyssoftware.treasure2.tileentity.AbstractTreasureChestTileEntity; import com.someguyssoftware.treasure2.worldgen.SurfaceChestWorldGenerator; +import net.minecraft.block.Block; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.server.MinecraftServer; @@ -39,7 +49,45 @@ */ public class SpawnChestCommand extends CommandBase { private static final String RARITY_ARG = "rarity"; - + private static final String FACING_ARG = "facing"; + private static final String CHEST_ARG = "chest"; + private static final String LOCKED_ARG = "locked"; + private static final String SEALED_ARG = "sealed"; +// private static final String LOCKS_ARG = "locks"; +// private static final String LOOTTABLE_ARG = "loottable"; + + private enum Chests { + WOOD(TreasureBlocks.WOOD_CHEST), + CRATE(TreasureBlocks.CRATE_CHEST), + MOLDY_CRATE(TreasureBlocks.MOLDY_CRATE_CHEST), + IRON_BOUND(TreasureBlocks.IRONBOUND_CHEST), + PIRATE(TreasureBlocks.PIRATE_CHEST), + IRON_STRONGBOX(TreasureBlocks.IRON_STRONGBOX), + GOLD_STRONGBOX(TreasureBlocks.GOLD_STRONGBOX), + SAFE(TreasureBlocks.SAFE), + DREAD_PIRATE(TreasureBlocks.DREAD_PIRATE_CHEST), + COMPRESSOR(TreasureBlocks.COMPRESSOR_CHEST), + SPIDER(TreasureBlocks.SPIDER_CHEST), + VIKING(TreasureBlocks.VIKING_CHEST), + CARDBOARD_BOX(TreasureBlocks.CARDBOARD_BOX), + MILK_CRATE(TreasureBlocks.MILK_CRATE), + WITHER(TreasureBlocks.WITHER_CHEST), + SKULL(TreasureBlocks.SKULL_CHEST), + GOLD_SKULL(TreasureBlocks.GOLD_SKULL_CHEST), + CRYSTAL_SKULL(TreasureBlocks.CRYSTAL_SKULL_CHEST), + CAULDRON(TreasureBlocks.CAULDRON_CHEST); + + Block chest; + + Chests(Block chestBlock) { + this.chest = chestBlock; + } + public static List getNames() { + List names = EnumSet.allOf(Chests.class).stream().map(x -> x.name()).collect(Collectors.toList()); + return names; + } + } + @Override public String getName() { return "t2-chest"; @@ -47,7 +95,9 @@ public String getName() { @Override public String getUsage(ICommandSender var1) { - return "/t2-chest [-rarity ]: generates a Treasure! chest at location (x,y,z)"; + return "/t2-chest [-rarity ] [-facing ] [-chest ] [-locked] [-sealed]: generates a Treasure! chest at location (x,y,z)"; + // [-locks ] + // [-loottable ] } /** @@ -57,56 +107,6 @@ public String getUsage(ICommandSender var1) { public int getRequiredPermissionLevel() { return 2; } - - /** - * Return the x, y, or z position for the whoever issued the command. - * coordinateValue should be 'x', 'y', or 'z'. - */ - private int getOriginValue (ICommandSender commandSender, char coordName) { - switch(coordName) { - case 'z': return commandSender.getPosition().getZ(); - case 'y': return commandSender.getPosition().getY(); - default: return commandSender.getPosition().getX(); - } - } - - /** - * Return the x, y, or z position based on the string entered. - * designed to detect relative positioning using ~. - * coordinateValue should be 'x', 'y', or 'z'. - */ - private int getPositionValue (String coordStr, ICommandSender commandSender, char coordName) { - int value = 0; - int origin = 0; - - // just ~ notation - if (coordStr.equals("~")) { - origin = getOriginValue (commandSender, coordName); - } - - // ~ plus number notation - else if (coordStr.charAt(0) == '~') { - try { - value = Integer.parseInt(coordStr.substring(1)); - } - catch (Exception e) { - Treasure.logger.error("Error with " + coordName + " coordinate: ", e); - value = 0; - } - origin = getOriginValue (commandSender, coordName); - } - // just number notation - else { - try { - value = Integer.parseInt(coordStr); - } - catch (Exception e) { - Treasure.logger.error("Error with " + coordName + " coordinate: ", e); - value = 0; - } - } - return value + origin; - } @Override public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) { @@ -126,7 +126,11 @@ public void execute(MinecraftServer server, ICommandSender commandSender, String // create Options object Options options = new Options(); options.addOption(RARITY_ARG, true, ""); - + options.addOption(FACING_ARG, true, ""); + options.addOption(CHEST_ARG, true, ""); + options.addOption(LOCKED_ARG, false, ""); + options.addOption(SEALED_ARG, false, ""); + // parse the command line arguments CommandLine line = parser.parse(options, parserArgs); @@ -134,50 +138,111 @@ public void execute(MinecraftServer server, ICommandSender commandSender, String Rarity rarity = Rarity.COMMON; if (line.hasOption(RARITY_ARG)) { String rarityArg = line.getOptionValue(RARITY_ARG); - rarity = Rarity.valueOf(rarityArg.toUpperCase()); + try { + rarity = Rarity.valueOf(rarityArg.toUpperCase()); + } + catch(Exception e) { + logger.warn("unable to set rarity to -> {}, defaulting to {}", rarityArg, rarity); + } } - Treasure.logger.debug("Rarity:" + rarity + "; " + rarity.ordinal()); + if (logger.isDebugEnabled()) { + logger.debug("rarity -> {}", rarity); + } + + // get the direction enum + Direction direction = Direction.NORTH; + if (line.hasOption(FACING_ARG)) { + String directionArg = line.getOptionValue(FACING_ARG); + try { + direction = Direction.valueOf(directionArg.toUpperCase()); + } + catch(Exception e) { + logger.warn("unable to set direction to -> {}, defaulting to NORTH", directionArg); + } + } + if (logger.isDebugEnabled()) { + logger.debug("facing -> {}", direction); + } + + // get the direction enum + Optional chests = Optional.empty(); + Block chest = null; + if (line.hasOption(CHEST_ARG)) { + String chestArg = line.getOptionValue(CHEST_ARG); + try { + chests = Optional.of(Chests.valueOf(chestArg.toUpperCase())); + } + catch(Exception e) { + logger.warn("unable to set chest to -> {}, defaulting based on rarity", chestArg); + } + } + if (logger.isDebugEnabled() && chests.isPresent()) { + logger.debug("chest -> {}", chests.get()); + } - // if (player != null) { + // TODO get the loottable property + // TODO get the locks property + World world = commandSender.getEntityWorld(); Random random = new Random(); // get the chest world generator + IChestGenerator gen = null; + if (chests.isPresent() && ChestGeneratorType.getNames().contains(chests.get().name())) { + gen = ChestGeneratorType.valueOf(chests.get().name()).getChestGenerator(); + } + else { SurfaceChestWorldGenerator chestGens = (SurfaceChestWorldGenerator) Treasure.WORLD_GENERATORS .get(WorldGeneratorType.SURFACE_CHEST); - // get the rarity chest generator - IChestGenerator gen = chestGens.getChestGenMap().get(rarity).next(); + // get the rarity chest generator + gen = chestGens.getChestGenMap().get(rarity).next(); + } + + // select the chest + if (chests.isPresent()) { + chest = chests.get().chest; + } + else { + chest = gen.selectChest(random, rarity); + } + + // place the chest BlockPos pos = new BlockPos(x, y, z); - - AbstractChestBlock chest = gen.selectChest(random, rarity); - - world.setBlockState(pos, chest.getDefaultState()); - AbstractTreasureChestTileEntity tileEntity = (AbstractTreasureChestTileEntity) world.getTileEntity(pos); - - // TODO no - need to select the loot table, set the resource location and sealed props in the tileentity + world.setBlockState(pos, chest.getDefaultState().withProperty(TreasureChestBlock.FACING, direction.toFacing())); + + // select loot table + // TODO determine if a loottable override has been specified Optional lootTableShell = gen.selectLootTable2(random, rarity); ResourceLocation lootTableResourceLocation = null; if (lootTableShell.isPresent()) { lootTableResourceLocation = lootTableShell.get().getResourceLocation(); } - else { - Treasure.logger.debug("Unable to select a LootTable for rarity -> {}", rarity); - return; - } if (lootTableResourceLocation == null) { - Treasure.logger.debug("Unable to select a LootTable for rarity -> {}", rarity); + logger.debug("Unable to select a LootTable for rarity -> {}", rarity); return; } + AbstractTreasureChestTileEntity tileEntity = (AbstractTreasureChestTileEntity) world.getTileEntity(pos); if (tileEntity != null) { // add the loot table - gen.addLootTable((AbstractTreasureChestTileEntity) tileEntity, lootTableResourceLocation); + if (line.hasOption(LOCKED_ARG) || line.hasOption(SEALED_ARG)) { + gen.addLootTable((AbstractTreasureChestTileEntity) tileEntity, lootTableResourceLocation); - // seal the chest - gen.addSeal((AbstractTreasureChestTileEntity) tileEntity); + // seal the chest + gen.addSeal((AbstractTreasureChestTileEntity) tileEntity); + } // update the backing tile entity's generation contxt gen.addGenerationContext((AbstractTreasureChestTileEntity) tileEntity, rarity); + + if (line.hasOption(LOCKED_ARG)) { + // add the locks + gen.addLocks(random, (AbstractChestBlock)chest, (AbstractTreasureChestTileEntity) tileEntity, rarity); + // rotate the locks + ((AbstractChestBlock)chest).rotateLockStates(world, pos, Direction.NORTH.getRotation(direction)); + // update the client + ((AbstractTreasureChestTileEntity) tileEntity).sendUpdates(); + } } } catch (Exception e) { @@ -195,7 +260,63 @@ public List getTabCompletions(MinecraftServer server, ICommandSender sen if (args[args.length - 2].equals("-" + RARITY_ARG)) { return getListOfStringsMatchingLastWord(args, Rarity.getNames()); } + else if (args[args.length - 2].equals("-" + FACING_ARG)) { + return getListOfStringsMatchingLastWord(args, Direction.getHorizontalNames()); + } + else if (args[args.length - 2].equals("-" + CHEST_ARG)) { + return getListOfStringsMatchingLastWord(args, Chests.getNames()); + } } return Collections.emptyList(); } + + /** + * Return the x, y, or z position for the whoever issued the command. + * coordinateValue should be 'x', 'y', or 'z'. + */ + private int getOriginValue(ICommandSender commandSender, char coordName) { + switch(coordName) { + case 'z': return commandSender.getPosition().getZ(); + case 'y': return commandSender.getPosition().getY(); + default: return commandSender.getPosition().getX(); + } + } + + /** + * Return the x, y, or z position based on the string entered. + * designed to detect relative positioning using ~. + * coordinateValue should be 'x', 'y', or 'z'. + */ + private int getPositionValue(String coordStr, ICommandSender commandSender, char coordName) { + int value = 0; + int origin = 0; + + // just ~ notation + if (coordStr.equals("~")) { + origin = getOriginValue (commandSender, coordName); + } + + // ~ plus number notation + else if (coordStr.charAt(0) == '~') { + try { + value = Integer.parseInt(coordStr.substring(1)); + } + catch (Exception e) { + Treasure.logger.error("Error with " + coordName + " coordinate: ", e); + value = 0; + } + origin = getOriginValue (commandSender, coordName); + } + // just number notation + else { + try { + value = Integer.parseInt(coordStr); + } + catch (Exception e) { + Treasure.logger.error("Error with " + coordName + " coordinate: ", e); + value = 0; + } + } + return value + origin; + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/entity/monster/BoundSoulEntity.java b/src/main/java/com/someguyssoftware/treasure2/entity/monster/BoundSoulEntity.java index 38e6bec70..3120e9d2c 100644 --- a/src/main/java/com/someguyssoftware/treasure2/entity/monster/BoundSoulEntity.java +++ b/src/main/java/com/someguyssoftware/treasure2/entity/monster/BoundSoulEntity.java @@ -7,6 +7,7 @@ import javax.annotation.Nullable; +import com.someguyssoftware.gottschcore.world.WorldInfo; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.particle.AbstractMistParticle; import com.someguyssoftware.treasure2.particle.MistParticle; @@ -98,9 +99,14 @@ protected void applyEntityAttributes() { public void onLivingUpdate() { super.onLivingUpdate(); - // create a mist particle - if (!this.isServerWorld()) { - spawnMist(); + /* + * create a mist particle if on client. + * this is slight change to the vanilla call EntityLiving#isServerWorld() + */ + if (WorldInfo.isClientSide(this.world)) { + if (!this.isAIDisabled()) { + spawnMist(); + } } // regeneration diff --git a/src/main/java/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java b/src/main/java/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java index a61053116..c82afbe8e 100644 --- a/src/main/java/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java +++ b/src/main/java/com/someguyssoftware/treasure2/enums/ChestGeneratorType.java @@ -3,13 +3,16 @@ */ package com.someguyssoftware.treasure2.enums; +import java.util.EnumSet; +import java.util.List; import java.util.function.Supplier; +import java.util.stream.Collectors; import com.someguyssoftware.treasure2.generator.chest.CauldronChestGenerator; import com.someguyssoftware.treasure2.generator.chest.CommonChestGenerator; +import com.someguyssoftware.treasure2.generator.chest.CrystalSkullChestGenerator; import com.someguyssoftware.treasure2.generator.chest.EpicChestGenerator; import com.someguyssoftware.treasure2.generator.chest.GoldSkullChestGenerator; -import com.someguyssoftware.treasure2.generator.chest.CrystalSkullChestGenerator; import com.someguyssoftware.treasure2.generator.chest.IChestGenerator; import com.someguyssoftware.treasure2.generator.chest.RareChestGenerator; import com.someguyssoftware.treasure2.generator.chest.ScarceChestGenerator; @@ -48,4 +51,13 @@ public enum ChestGeneratorType { public IChestGenerator getChestGenerator() { return factory.get(); } + + /** + * + * @return + */ + public static List getNames() { + List names = EnumSet.allOf(ChestGeneratorType.class).stream().map(x -> x.name()).collect(Collectors.toList()); + return names; + } } diff --git a/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java index e91b02fec..d0b04e82c 100644 --- a/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java +++ b/src/main/java/com/someguyssoftware/treasure2/generator/chest/IChestGenerator.java @@ -61,11 +61,6 @@ default public GeneratorResult generate(final World world, f GeneratorResult result = new GeneratorResult<>(ChestGeneratorData.class); result.getData().setSpawnCoords(coords); // select a loot table - // LootTable lootTable = selectLootTable(random, rarity); - // if (lootTable == null) { - // logger.warn("Unable to select a lootTable."); - // return result.fail(); - // } Optional lootTableShell = selectLootTable2(random, rarity); ResourceLocation lootTableResourceLocation = null; if (lootTableShell.isPresent()) { diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java index 3d2b02777..010dd848d 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java @@ -12,11 +12,13 @@ import java.nio.file.StandardCopyOption; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; +import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.stream.Collectors; import java.util.Optional; import java.util.Set; @@ -457,6 +459,15 @@ public enum SpecialLootTables { SILVER_WELL, GOLD_WELL, WHITE_PEARL_WELL, - BLACK_PEARL_WELL + BLACK_PEARL_WELL; + + /** + * + * @return + */ + public static List getNames() { + List names = EnumSet.allOf(SpecialLootTables.class).stream().map(x -> x.name()).collect(Collectors.toList()); + return names; + } } } From d0a472674d9f926afef53c95d3e22d859ae8c838 Mon Sep 17 00:00:00 2001 From: Mark Date: Sat, 12 Dec 2020 21:26:31 -0500 Subject: [PATCH 18/20] crystal skull updates --- .../someguyssoftware/treasure2/Treasure.java | 28 +++++++----------- .../treasure2/config/TreasureConfig.java | 6 ++-- .../treasure2/entity/monster/MimicEntity.java | 17 ++++++----- .../loot/TreasureLootTableMaster2.java | 7 +++-- .../blocks/chests/crustal_skull_texture.png | Bin 301 -> 0 bytes .../blocks/chests/crystal_skull_eyes.png | Bin 328 -> 5788 bytes .../chests/crystal_skull_mouth_front.png | Bin 338 -> 5781 bytes .../blocks/chests/crystal_skull_texture.png | Bin 301 -> 5682 bytes .../entity/chest/crystal-skull-chest.png | Bin 0 -> 8497 bytes .../chests/special/crystal_skull_chest.json | 3 +- 10 files changed, 29 insertions(+), 32 deletions(-) delete mode 100644 src/main/resources/assets/treasure2/textures/blocks/chests/crustal_skull_texture.png create mode 100644 src/main/resources/assets/treasure2/textures/entity/chest/crystal-skull-chest.png diff --git a/src/main/java/com/someguyssoftware/treasure2/Treasure.java b/src/main/java/com/someguyssoftware/treasure2/Treasure.java index 46e7f34fe..2d84efaa6 100644 --- a/src/main/java/com/someguyssoftware/treasure2/Treasure.java +++ b/src/main/java/com/someguyssoftware/treasure2/Treasure.java @@ -99,7 +99,7 @@ "Credits to mn_ti for Chinese and to DarkKnightComes for Polish translation.", "Credits to Mythical Sausage for tutorials on house/tower designs.", "Credits to OdinsRagnarok for Spanish translation and DarvinSlav for Russian translation.", - "Credits to sfs131010 for updated Chinese translation."}) +"Credits to sfs131010 for updated Chinese translation."}) public class Treasure extends AbstractMod { // constants @@ -123,10 +123,8 @@ public class Treasure extends AbstractMod { // NOTE can't make final here as it is set during world load // loot tables management -// public static TreasureLootTableMaster LOOT_TABLES; - public static TreasureLootTableMaster2 LOOT_TABLE_MASTER; - + /* * Treasure Creative Tab Must be initialized before any registry events * so that it is available to assign to blocks and items. @@ -175,8 +173,8 @@ public void preInt(FMLPreInitializationEvent event) { MinecraftForge.EVENT_BUS.register(new LogoutEventHandler(getInstance())); MinecraftForge.EVENT_BUS.register(new PlayerEventHandler(getInstance())); MinecraftForge.EVENT_BUS.register(new WorldEventHandler(getInstance())); - MinecraftForge.EVENT_BUS.register(new MimicEventHandler(getInstance())); - MinecraftForge.EVENT_BUS.register(new AnvilEventHandler(getInstance())); + MinecraftForge.EVENT_BUS.register(new MimicEventHandler(getInstance())); + MinecraftForge.EVENT_BUS.register(new AnvilEventHandler(getInstance())); // configure logging // create a rolling file appender @@ -187,11 +185,6 @@ public void preInt(FMLPreInitializationEvent event) { // add appender to the GottschCore logger addAppenderToLogger(appender, GottschCore.instance.getName(), (ILoggerConfig) getConfig()); - // TEST /////// - AppenderRef appenderReference = AppenderRef.createAppenderRef(appender.getName(), null, null); - Treasure.logger.debug("appender -> {}, appenderRef.ref -> {}", appender.getName(), appenderReference.getRef()); - // END OF TEST ////// - // register the GUI handler NetworkRegistry.INSTANCE.registerGuiHandler(this, new GuiHandler()); @@ -203,16 +196,16 @@ public void preInt(FMLPreInitializationEvent event) { 15, Side.SERVER); simpleNetworkWrapper.registerMessage(CharmMessageHandlerOnClient.class, CharmMessageToClient.class, 25, Side.CLIENT); - + // add capabilities CapabilityManager.INSTANCE.register(ICharmCapability.class, new CharmStorage(), CharmCapability::new); CapabilityManager.INSTANCE.register(IKeyRingCapability.class, new KeyRingStorage(), KeyRingCapability::new); CapabilityManager.INSTANCE.register(IEffectiveMaxDamageCapability.class, new EffectiveMaxDamageStorage(), EffectiveMaxDamageCapability::new); - + // register custom loot functions net.minecraft.world.storage.loot.functions.LootFunctionManager.registerFunction(new CharmRandomly.Serializer()); net.minecraft.world.storage.loot.functions.LootFunctionManager.registerFunction(new SetCharms.Serializer()); - + } /** @@ -266,9 +259,8 @@ public void init(FMLInitializationEvent event) { } // add the loot table managers -// LOOT_TABLES = new TreasureLootTableMaster(Treasure.instance, "", "loot_tables"); LOOT_TABLE_MASTER = new TreasureLootTableMaster2(Treasure.instance); - + TEMPLATE_MANAGER = new TreasureTemplateManager(Treasure.instance, "/structures", FMLCommonHandler.instance().getDataFixer()); @@ -291,7 +283,7 @@ public void postInit(FMLPostInitializationEvent event) { // associate painting items to painting blocks and vice versa ((PaintingItem) TreasureItems.PAINTING_BLOCKS_BRICKS).setPaintingBlock(TreasureBlocks.PAINTING_BLOCKS_BRICKS); ((PaintingItem) TreasureItems.PAINTING_BLOCKS_COBBLESTONE) - .setPaintingBlock(TreasureBlocks.PAINTING_BLOCKS_COBBLESTONE); + .setPaintingBlock(TreasureBlocks.PAINTING_BLOCKS_COBBLESTONE); ((PaintingItem) TreasureItems.PAINTING_BLOCKS_DIRT).setPaintingBlock(TreasureBlocks.PAINTING_BLOCKS_DIRT); ((PaintingItem) TreasureItems.PAINTING_BLOCKS_LAVA).setPaintingBlock(TreasureBlocks.PAINTING_BLOCKS_LAVA); ((PaintingItem) TreasureItems.PAINTING_BLOCKS_SAND).setPaintingBlock(TreasureBlocks.PAINTING_BLOCKS_SAND); @@ -318,7 +310,7 @@ public void postInit(FMLPostInitializationEvent event) { */ @Override public IConfig getConfig() { -// return Configs.modConfig; + // return Configs.modConfig; return TreasureConfig.instance; } diff --git a/src/main/java/com/someguyssoftware/treasure2/config/TreasureConfig.java b/src/main/java/com/someguyssoftware/treasure2/config/TreasureConfig.java index 6ec7305a7..4ff47f893 100644 --- a/src/main/java/com/someguyssoftware/treasure2/config/TreasureConfig.java +++ b/src/main/java/com/someguyssoftware/treasure2/config/TreasureConfig.java @@ -294,7 +294,7 @@ public class TreasureConfig implements IConfig, ILoggerConfig { public static final WorldGen WORLD_GEN = new WorldGen(); @Name("10 foreign mods") - @Comment("Foreign mod properties") + @Comment({"Foreign mod properties", "@Deprecated - As of v1.14.0, these properties are no longer used."}) public static final ForeignModEnablements FOREIGN_MODS = new ForeignModEnablements(); @Name("11 oasis") @@ -326,11 +326,11 @@ public static void init() { * */ public static class ForeignModEnablements { - @Comment({ "Add mod's MODID to this list to enable custom loot tables for a mod." }) + @Comment({ "Add mod's MODID to this list to enable custom loot tables for a mod.", "@Deprecated - As of v1.14.0, this property is no longer used."}) @Name("01. Foreign mod IDs for custom loot tables:") public String[] enableForeignModIDs = new String[] { "mocreatures", "sgs_metals" }; @Comment({ "A list of mods that have prebuilt loot tables available.", - "Note: used for informational purposes only." }) + "Note: used for informational purposes only.", "@Deprecated - As of v1.14.0, this property is no longer used." }) @Name("02. Pre-build loot tables for foreign mod IDs:") public String[] availableForeignModLootTables = new String[] { "mocreatures", "sgs_metals" }; } diff --git a/src/main/java/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java b/src/main/java/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java index d01068db9..8e5fb03ae 100644 --- a/src/main/java/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java +++ b/src/main/java/com/someguyssoftware/treasure2/entity/monster/MimicEntity.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Random; +import com.someguyssoftware.gottschcore.loot.LootTableShell; import com.someguyssoftware.gottschcore.random.RandomHelper; import com.someguyssoftware.treasure2.Treasure; import com.someguyssoftware.treasure2.enums.Rarity; @@ -156,26 +157,26 @@ protected ResourceLocation getLootTable() { * @return */ protected ResourceLocation selectLootTableResourceLocation(Random random, final Rarity chestRarity) { - ResourceLocation location = null; + LootTableShell location = null; // select the loot table by rarity - List locations = Treasure.LOOT_TABLE_MASTER.getLootTableResourceByRarity(chestRarity); + List tableShells = Treasure.LOOT_TABLE_MASTER.getLootTableByRarity(Rarity.SCARCE); // select a random location from the list - if (locations != null && !locations.isEmpty()) { + if (tableShells != null && !tableShells.isEmpty()) { int index = 0; /* * get a random container */ - if (locations.size() == 1) { - location = locations.get(0); + if (tableShells.size() == 1) { + location = tableShells.get(0); } else { - index = RandomHelper.randomInt(random, 0, locations.size()-1); - location = locations.get(index); + index = RandomHelper.randomInt(random, 0, tableShells.size()-1); + location = tableShells.get(index); } Treasure.logger.debug("Selected resource location index --> {}", index); } - return location; + return location.getResourceLocation(); } } diff --git a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java index 010dd848d..e6782eaf3 100644 --- a/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java +++ b/src/main/java/com/someguyssoftware/treasure2/loot/TreasureLootTableMaster2.java @@ -191,7 +191,7 @@ public void register(String modID) { // map the loot table resource location Rarity key = Rarity.valueOf(path.getName(path.getNameCount()-2).toString().toUpperCase()); // add to resourcemap -// CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(resourceLocation); + CHEST_LOOT_TABLES_RESOURCE_LOCATION_TABLE.get(CUSTOM_LOOT_TABLE_KEY, key).add(resourceLocation); // create loot table Optional lootTable = loadLootTable(getWorldDataBaseFolder(), resourceLocation); if (lootTable.isPresent()) { @@ -229,9 +229,12 @@ public void register(String modID) { // add to map SpecialLootTables specialLootTables = SpecialLootTables.valueOf(com.google.common.io.Files.getNameWithoutExtension(path.getName(path.getNameCount()-1).toString().toUpperCase())); LOGGER.debug("special loot tables enum -> {}", specialLootTables); - // add to map + // add to special map SPECIAL_LOOT_TABLES_MAP.put(specialLootTables, lootTable.get()); LOGGER.debug("tabling special loot table: {} -> {}", specialLootTables, resourceLocation); + // add to the resource location -> lootTableShell map + CHEST_LOOT_TABLES_MAP.put(resourceLocation, lootTable.get()); + // register with vanilla LootTableList.register(resourceLocation); } else { diff --git a/src/main/resources/assets/treasure2/textures/blocks/chests/crustal_skull_texture.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crustal_skull_texture.png deleted file mode 100644 index bf94630a6e6db882f1abf226486d0a8563e7cb40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPd4=aN&{#qkQtodK;$(V=dc?@^ZF@=(Qi_$}5;B%w}9r+gm@^o9l)i-{kgd zEJd$#blPKOCT;0S&A6MAko;3ZK_^zeVPmYI!0KsTN6kN6HP-g}rIcX$!g%(5z6O=% kkh>AbwuVXA|NHa9NzBRHT))M=p&I0BPgg&ebxsLQ08Ra6WB>pF diff --git a/src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_eyes.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_eyes.png index 1a853c50c2ea4603d17c84c64b5d18f52fb13574..5d5afbb1ba5f39b3451045160fe8d581c9b4bc35 100644 GIT binary patch literal 5788 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 Ib7AVg04x=wK>z>% delta 259 zcmV+e0sQ`)Eyx0pBa@C5E`Q<-1p*)(=Xar*0000TX;fHrLvL+uWo~o;00000Lvm$d zbY)~9cWHEJAV*0}P-HG;2LJ#7tVu*cR5;7+l1&Q2Fc5{m1Q)^VjEF0D7CeXd@L=A> zt#s)bT&5I6i3FsLi_p@apglm}?qxC`Z-#+cV)$@7uL6Kpg4bt_tau6<53oO#y`IGo z(0nW&HO5F}6}|JJt#u_+v78SWvmJq*57Pi`v9c|&o9^cb&IgWn0az}(7(05%GyVg# z5?l|PUV=P}VCR{ZKr1_1+&eLUatGaIHO-q2#`T}|LKFyc<{ObS!002ov JPDHLkV1j&0YtjG! diff --git a/src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_mouth_front.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_mouth_front.png index 4856a58ec8e88b5aa1c506b96e7ae7b1e70b396c..45988b97877c8aca24d86c23725f90f754bcaf46 100644 GIT binary patch literal 5781 zcmeHKYgiL!7LG)@$wiQhAZiGRK$~O|5)uMYAw%Q31`-boPB5ha&4N);hrjsms7>}qr@G1!!{NM)?5@skE%U1 zt}ms_n(FcLl*xrc$)O(>c4qr<7c>>fMOV(HSwH&q==#l5t4H`9QdzQ8saZwz;v+vL z`a5;1Aw18 zOVcy)GcZA<#)*5=qbFKwo-NuS>Sx4KnhJ;u73-GyufYLn;i*Gsow zr4EaVp8Y6O>}iwL7Pi$Jez5%7BRlWo_m1x022g?j&sidOGEc0ZC4ROgiLp?+7 zO}x5Qz7Ctdy7W9c^tYq7-!iJN)|Je2=sNpN^v>@68&)>7`W!O7yY}T`df{l+x0yB% z{C9)Kzkk_nb~HPA8_)oJ;ZXQ^|1_7(Dowp;`Qr5$lY*;j|El}}flFRIVn;DQJNn>f@+wXU92|9Wwc z&EC2am$;{{OGmlKhq{J1R#sc(PH)q<$dcN|huYZ`xW{Zsvvi&j#ZrV7xwM{g1^qol zUUw{toxavGow|J7O~yTW8p3IFT`~54-LU(S3(dwmc*TlO7wp+{wU#xrG&ZtvwX?YN zmBX}L(WdfWG$CclO&Qj_l>65r&p9S+zFd69f>e^KmKFTeUVZ&$gU6{dQ;U31oz=M2t1V7jWwRp8Q8%w4ZawNX>rqzYTc6(hq zf6t)AIi`)QZF&*WxtiW~nA}`h<>b}n9#rdS8~rHOqbfnHJxrVNjCZN>>`&s>hjWR( z#dllB+^kOt+;@Zj9g+X8-Gn*{lIVOvYSl7l)Tch?N>NS4_wTC8=5pu zaQeFG)>~Jq6~)?t?1Ozk zp++IR5AbrTEf)h8#J-J7Y@D0Dfv|$ko3&Yg2v&|LcM(i%PHh3F3R`|KyT;ml@fab` zxa^hHlE;=FTXsJbxZR)5WPkl)+g0t;8E87;d6=X4G&_?;APiZm;PWGdeEyrxgT*Pz zSj!7N5n;D1JaVVl+bSi$Ex&{tc$)o1BtmoEBsj9d{T z5U)I!J;7o@{_kra9;io(>aB(c_$1zDbe#kx`>&tSSRc$Ou?-&?Vn1WYLf4K1HL1A= zV-xm;756MF*x>-Tyik0~nCfl=St-MgSRzl{tn^`Y9`E1we@$2`PPgyhU zmy#e&&&@?o)5~Rw1s6r;;}`cjHusJq8dXfLP&D7DEpM4Pr03l6f-5hYW*>hv;eKP8 z1J7uAd1mgzGLMcS8~l>*1Jzb9+^~RBWc7v;*-boH#OB-MD3TyUQ-?$!lbX7ZP1u zjBdea=6375CwE-$t-Q4HhIQd6P5F

b4LF)-x2?PB2R}jSC@4Dkw!HFjcQqW2r$P z1WeMaK_~%6NfKDDQ1Qqe701XVg_K8*W{Ciinh(b-Len&GWLj7hl$HSbNy(EYng{5) z7=aQ-L6TmXsM2!vJhFk8i=E?U8kuB(pb0$kEKvlBk7!^Llggw56oFom!XQsHCk1Gv zGOjpy$^Zp6;*sM~RL!N)bUGbX=R-v_avI&w&yNN$Xbc7gLr}D-DiqXHR9ZKjqMsue z)O@?_VN@X-`QijNbeL{qyh_^ntjBJ1|v{1&LRxvk?{#|r3j>uat)^(2FwOoFq1-O zNZAyoFWrYCVXzLgC1KKnjz|W>fqCx*r7u z7?1?uNF{W(#6X1$%MFYW^2iKoKe@pYkqDwPM5Dy&MWK=+I_*1fltKwdq986C-4|f9 zeSGNvhr{Hs7(VYnGhvMu%Uhh44p15W%u*#<{81=DIZRWlh^L4HwX#n4y?2qDdVTKN3#rANBW= zM1?^r63I}%ToA%lNg*JO}d3>wUZ~9>$Xh zU;tQMQRwt22Eb*|xl9hZ|8A24Xn1RUv)TZ>d5A>Z!FmMX&4nw(6D~4Ytxivo*j*i+B%K0{C*hCw(V13`7-*d^I53J+ z56vGnY}GxZKJ3VgCc3%hjCDxNq5jbubZB^?TG-RuW%9-5Z9_JEwFrD#+){h|Oij(r zNfmjS*x@Seb#EiyY1@0QkJkIoo_XK`x1uMnI!(hyTAa*1Ht~dgM&Gln%=KAB>XFw? z>C0`$`qgBb5`o5wMV0dT*m1SHi?`gl$oM$3n&8{GgJ48ZL<9yAwFjPJvm*!vVZmiV H^OyV!V#k)A delta 270 zcmbQLdx>d+^5i~Iz4}KytV}XS9zj=EGB7a6W`;zRIOpf)rskCZxeN@>MX8A;sVNHO znI#zt?w-B@DSD~wK=Ey!E{-7GxfBG8|@*lQUxjg0}nZ>+6#>{{4DvpUC|0fBmru zsoOdmfnedTe~ipP;GBBd9HfvfkI(IpU)5K=KmYf-JN|bLvG{*KPNm0DnCHmt?w0@m zlf{}X_%#_4&zXBvx7!Qs|M%nkfiK@hnJ?cDkNE3jz%$`5XR>he1rIic3rXHn*lHg1 Qfc)m^>gTeK*(sq30F(Q0)Bpeg diff --git a/src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_texture.png b/src/main/resources/assets/treasure2/textures/blocks/chests/crystal_skull_texture.png index bf94630a6e6db882f1abf226486d0a8563e7cb40..b74c0ca18322f2815b88eaf811b492b39cdaea08 100644 GIT binary patch literal 5682 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 Lh|gi~rR)9$gJN_m delta 232 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/loot_tables/treasure2/chests/special/crystal_skull_chest.json b/src/main/resources/loot_tables/treasure2/chests/special/crystal_skull_chest.json index 719a5b859..daa2ea9d5 100644 --- a/src/main/resources/loot_tables/treasure2/chests/special/crystal_skull_chest.json +++ b/src/main/resources/loot_tables/treasure2/chests/special/crystal_skull_chest.json @@ -1,6 +1,7 @@ { "version": "1.0", "category": "general", + "rarity": "epic", "pools": [ { "name": "treasure", @@ -71,7 +72,7 @@ } } ] - }, + } ] }, { From aeafa70cabbd27628282eeaf38aaff504fd480ab Mon Sep 17 00:00:00 2001 From: Mark Date: Sun, 13 Dec 2020 12:29:45 -0500 Subject: [PATCH 19/20] add enchantment glow to charmed coins/gems. --- build.gradle | 112 +++++++++--------- gradle.properties | 6 +- gradle/wrapper/gradle-wrapper.jar | Bin 52271 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 78 ++++++------ gradlew.bat | 14 +-- .../someguyssoftware/treasure2/Treasure.java | 2 +- .../treasure2/item/CharmedCoinItem.java | 8 ++ .../treasure2/item/CharmedGemItem.java | 8 ++ .../items/coins/charmed_gold_coin.png | Bin 560 -> 314 bytes .../items/coins/charmed_silver_coin.png | Bin 642 -> 268 bytes update.json | 7 +- 12 files changed, 128 insertions(+), 110 deletions(-) diff --git a/build.gradle b/build.gradle index da085b1d3..52046dd53 100644 --- a/build.gradle +++ b/build.gradle @@ -1,35 +1,19 @@ buildscript { repositories { - jcenter() - maven { url = "http://files.minecraftforge.net/maven" } + maven { url = "http://files.minecraftforge.net/maven" } + jcenter() mavenCentral() } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' - classpath 'org.ajoberstar:grgit:1.7.2' + classpath 'net.minecraftforge.gradle:ForgeGradle:3.+' } } -plugins { -// id 'io.franzbecker.gradle-lombok' version '3.1.0' - // must use gradle v3.0+ for this version of shadow (2.0.1). Update gradle-wrapper.properties - id "com.github.johnrengelman.shadow" version "2.0.1" -} - -apply plugin: 'net.minecraftforge.gradle.forge' +apply plugin: 'net.minecraftforge.gradle' //Only edit below this line, the above code adds and enables the nessasary things for Forge to be setup. +apply plugin: 'eclipse' +apply plugin: 'maven-publish' -ext { - // Open the Git repository in the parent directory. -// git = org.ajoberstar.grgit.Grgit.open(file('../')) - - // Get commit id of HEAD. -// revision = git.head().id - // Alternative is using abbreviatedId of head() method. - // revision = git.head().abbreviatedId -} - -//version = "mc${mc_version}-v${mod_version}-${git.head().abbreviatedId}" version = "mc${mc_version}-f${forge_version}-${mod_version_type}${mod_version}" group = "${package_group}" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "${mod_name}" @@ -40,54 +24,68 @@ compileJava { } minecraft { - version = "${mc_version}-${forge_version}" - runDir = "run" + // The mappings can be changed at any time, and must be in the following format. + // snapshot_YYYYMMDD Snapshot are built nightly. + // stable_# Stables are built at the discretion of the MCP team. + // Use non-default mappings at your own risk. they may not always work. + // Simply re-run your setup task after changing the mappings to update your workspace. + mappings channel: 'snapshot', version: '20171003-1.12' + // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. + + // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') + + // Default run configurations. + // These can be tweaked, removed, or duplicated as needed. + runs { + client { + workingDirectory project.file('run') + + // Recommended logging data for a userdev environment + property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + + // Recommended logging level for the console + property 'forge.logging.console.level', 'debug' + } - if (project.hasProperty('mappings_version')) - mappings = project.mappings_version -} + server { + // Recommended logging data for a userdev environment + property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' -//Optional: change the project structure -sourceSets.main{ - java{ - srcDirs 'src/main/java' //, 'test' //set the source folder as the /src subfolder - } - resources{ - srcDirs 'src/main/resources' //set the resources folder as the /resources subfolder - } + // Recommended logging level for the console + property 'forge.logging.console.level', 'debug' + } + } } -def gottschcore_path="../gottsch-minecraft-GottschCore/GottschCore${mc_version}/build/libs/GottschCore-mc${mc_version}-f${forge_version}-v${gottschcore_version}.jar" - +def gottschcore_path="../gottsch-minecraft-GottschCore/GottschCore${mc_version}/build/libs/GottschCore-mc${mc_version}-f${gottschcore_forge_version}-v${gottschcore_version}.jar" +println gottschcore_path dependencies { -compile files('../ModCommonLibs/libs/commons-cli-1.4.jar') + minecraft 'net.minecraftforge:forge:1.12.2-14.23.5.2854' + compile files('../ModCommonLibs/libs/commons-cli-1.4.jar') //compile files(gottschcore_path) shadow files(gottschcore_path) - compileOnly "vazkii.patchouli:Patchouli:${patchouli_version}" } -repositories { - maven { - name = 'Patchouli' - url = "https://maven.blamejared.com" +jar { + manifest { + attributes([ + "Specification-Title": "${archivesBaseName}", + "Specification-Vendor": "Some Guys Software", + "Specification-Version": "1", // We are version 1 of ourselves + "Implementation-Title": "${archivesBaseName}-${version}", + "Implementation-Version": "${version}", + "Implementation-Vendor" :"Some Guys Software", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + ]) } - } -processResources -{ - // this will ensure that this task is redone when the versions change. - inputs.property "version", project.version - inputs.property "mcversion", project.minecraft.version - - // replace stuff in mcmod.info, nothing else - from(sourceSets.main.resources.srcDirs) { - include 'mcmod.info' - - // replace version and mcversion - expand 'version':project.version, 'mcversion':project.minecraft.version - } } shadowJar { + // with version 4.0.4+ of ShadowJar, the dependencies are required to instruct what files + // are included in the shadow + dependencies { + include(dependency(files('../ModCommonLibs/libs/commons-cli-1.4.jar'))) + } // move everything under "io.github" (which in the DelaunayTriangulator lib) to "com.someguyssoftware.dungeons2.triangulation" relocate "org.apache.commons.cli", "com.someguyssoftware.treasure2.cli" // Replace the default JAR diff --git a/gradle.properties b/gradle.properties index 7d10c2de2..4d9f05dbc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,9 +11,11 @@ mod_version=1.14.0 #versions mc_version=1.12.2 -forge_version=14.23.5.2768 -mappings_version=snapshot_20171003 +#forge_version=14.23.5.2768 +forge_version=14.23.5.2854 +mappings_version=20171003-1.12 gottschcore_version=1.14.0 +gottschcore_forge_version=14.23.5.2768 patchouli_version=1.0-20.108 # paths diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 30d399d8d2bf522ff5de94bf434a7cc43a9a74b5..7a3265ee94c0ab25cf079ac8ccdf87f41d455d42 100644 GIT binary patch delta 29215 zcmZ6SV{j$F)~++LZQHhO+qSJ8?IaU(V%zqPGZRnDiEZ1OJLlG|I^TD@s=KPId-bnX zZ&yF-?S@Q<)*1+8RRsu0OfWE5STHa!F|Z_L66F8Rc$1FglLWK{vQO~t+;82#f&K5z z|02M^|1GLsWPfNqZB?h$QJ&hW%Q7Js3mqz>3oE9n`yBVRU$#x@oQwBi+AcJ33)LbyHj! zqMkcC*8>0rEIy&CR<#riWH^xfqdjpFw6ZIxsJtb3*+MkGaN_IWQB$lF;7*k7pbeOD zmb1K+jFzL(<+Jp(OthHdw;d$swr1tQ&FL2CDdE$z7xeZ*%AB3q8QiuwFO!urfK*x> z^C0`x$!x40mfMoxlDW1;qsPANS*?;Evg_&AnAS!y*3{UXc~ktimD(YK4{d1Jq}|Lc z*-|lOHEMdI6%)Os`j~-BoQ@zX8m~4@`7HYcG`0(S+(~6a6S+T49qviR-m>6+=K%tg zSK0R&nZ0I5kcfZabQv33YV%wHKuW%q%#KSX7Qp9}^^D@A+r+(r9>~t2TrIg!jqWZx zNukP$qPw3FX418lPG#!%aL}pcI{s!<9Tuj784xp5nP7~c+@)vU0}C%a zT8ZP%B(ezC1)3gw7w^w_k?)rXPzv7cDDUkk-^XaDWk?Tm!3>DKKEb;1Go~W|XdQ#T@yZfil2BCpt9L*mD9 zh&NrIoalYIl(-U5bp40?L}i)cb+cOnWXI{8x0aHE4ND-xn9))+I5 zcMEsWsN0|4h^tP&BCwD0E@4EunRokGL}Mg&tw>6U8ifuVf1y6z@}Xe-3jdNZyyiiK z^}T?cDG`WJ){p%C{tet6HRa(@B-+gI7pyi~zZ3XG)L_Za6KUPp`~qsWL(*{zd^d6Q zUqtc}xsHkC(fbbu(v%J~Cx5lXr=0SK94Ni2(-AVB`ER#KV`NhoEW`Uq+fud1EP|gV zRM;}J5HD+h=0K?3vML*oK8?L#-xHfSMWiSiUub$SFB6iO0hYgC_n49F zMP@80Dy-^K2QzsCh{*=|!LZ-5sbxn`17b+sDm@OkLy2?ASc5##o|THd3Ntvj2lT*K zRMJFbXp$n^Q<5i?$zKF`uV3W8VE!wt|MXA{EQS8t+W!#BaTk6Mlz&Pq`fri*{|e== z9yp+?yNfSC%*)f(%GuM-!pzgfo!P?C%)=v1!^j0)3{waqb=bW%zt+H$>ItMNAZ}otZ#zWq+LK-Ho+;Jt(7*h$<2KPrh@k>N`?>nYpWR zc#&#buupd=Z&{ZnQ$v|A2dc5jt+EX5b@)YO$idW93lu%#1XGa@Z7++K2l&0!??zw} z%i{Ju$_7IClXVI`_7!`unUF}kPp3I_B4HY?`!Oosh0&@8((OFYeuZ*Tanc@XxKy=U z0%OE5XerNpH0}e$kQ(lf9CLF*_!qpQ6PiwsR-hvhrhHHWArUv`uTLgomPmDZ@Sjc$ zj?&2JZzu*^SA{jhWD@fmvB^V=5D~z-fWXk=G!hVfcnets4M)`9%W~r}}Dn zH*~ZKoF@mwRXnCAha*3oqqu0UHwVH@mYAqcDL+ny*8AV{2m=F8Y~&`tqe+z<0&qW~ zVq5tszzq$_2qd6a-Q3fPp(lc59`XnT`a=nP>M$t#_6FE4W;70kl~N}X#?d4)2in{^ zD=aB2m>farlToZo<~>-3B;|F;uRN|Nusqv?(LFYGsbg6~X-(&*rj$*B62&8CittrT`< zTog0Y;O+)I2@-ppN*k?i!pi0}%KFbH7ZF%+$`|EK&I?PQJWeS=^W2|Zc5g}|cJudJ zL9O~um=&PMqrj`c=RW_L-s`@{U0QNe+-NeYL_!p)3&7BFe*=lIdK<^6T@E6Qqs z5%*s@tTz^-zfL=lUoxXSo*xYnF8C{v8J+>LCjI-=VLy85*JL#bc*()LVDZT*IgL)T zE0Z)LnC-pH?0qw+&k)sE@IB{#8x7+tg>eDrN@Lr)Y?mZsnV0Zzan8Na=7ym=uchtD zo#%(CjU1PTr@Erf%ww6I=Z3XA`?-}Imxt=IJCwk{j|%r!jDh3w6_>4|zKb3#Ob^x{ zdh53-8tK=5;EyF1qbP|;L*^(?BzPoz)TGc*XKzL{mj($UW@YT&ZLKAuPTMa<5)eQO zlo4nZ6itY_T==q$EWDg zax|ycI42H9QgvzBwYjToWT+=T7>mFjGuqP?imXn#bpbo2@pSs;bEBRt-_>WkH zr<#Jn!c#{E=8B>9D$(K6{w**i+qR5Szhg$8reeIet)$pPyP9#+QW0y^vypSRkmHh_ zPf_2_|GEB~jr{KW(h__}6=q#L2dKc}F2V`8RCdUnItzI6jG6E9a46+*k}@p(<1XO> zVCEGDBq+|0x?k1rZv`KgB_~&RhE>DnfbZs`5B#{J5IC3T)x085M*tq^4f^Jdmojb> zvt;k4k8kM)SzB?-Sg{7?3mAI}5mWUz3P34_wAEqxupVrLT~b<3*G(ba;kiuBtGh8D zlzYInj3{L&Kly14wV-)$Y^5@lM6)uRb|_p~?2!|vP30&}?wer{&r=7iTDtZRJ?~Go zZq{DU_)JX*l5#B%Apj*I*u+2->tF^0IQ$PVWx;{Xkv)Q`Tga9pp$DG_oF zv$0XmY9em#OI5;2!ed7nx6aR@k1$u^tRAdJDzT9#IG8VD(hOx%o0s#_jVQ5^MJT$- z<8LyCXVGni;V7YHOxevj#BenG{B)dd-t9xle8Kyu6;*wscZz`-mH^LCc}$2$Odw21 zsDP_ENlKxSDFM=pNoLqYRr>co6{kx$Ej(d*1bNcINe1%h%XX@-Qb9Os*^T zdj@yeElqkrh*ap4G)TIHyt>=9uo=sa@pW6yv_N&peb>2B;`d`aovGh@x8y(T2;$7k zD)6b2AP0_jLQ%(^%tf0)twv^bxr=S3p}6Bo_c*7kBphMnJ>=QMv?B7Rb#^fy+-GKy z9Nue4IPd~ zd+gf6Kq)yH&{mH9w{;3s^|ZtN;O9)#)%xPe(ZCIMx>~_q!3Htxk3w8DYf3q+4NyA2t*UmM-%s_3_F9#ilg@=kgqxGyW@S9LBC=QhY3Py)$Fkj0YU1^zZ0VTgVYNeiSDVGBRW|jL z%(N~S@8fUN7)O|`JwqDvy=mV~8rj-w1pUp&6n(7vPv537k7@-qeLoq%XEzTHF_5aQ z5%C7ga+tlda}WHInJ5RR3?U+d2M8i63X%zZ0bc{hrq?GI(JK)tpPN58A+{b$TY{jgn8%OJ=(#FT(uf1?;rJ-MJShg=smK%+h`NuQ*Jg?fKsZp80g(Q^{85V``Q8sq40( z-`W}vVHhU;+;DO>kkm4G*V1hFGL|Z2Lhpz%H5knLOz+eD1N)Rtc#`2>PWh}+GX zoFyRZR>FwnGmJWkV!Irf&zkj!TI3%E%VIC&>cDdk73doNkd;w2a@U$jOd&0rM55uu zR`x=B$YuBqZ;KIl7Q=1IgR=G~Ca`@GUC6wqGylZ&6;Z@?F`lWkwfQg>7X@?+bZq8b zT&u53c`y!_aPGMEXhqxpvI6$R=epR4{K{f`Dxig}!KcAKQ1SJuJ@5;?T%OGw&d#6p z3fo_v!>rh8i?t<=4r{hOg==k-0gu&{QE0fHBM)(K({aS?BUqJWny?TcK?hM=d# zw#8}}CxuJ>4St>bEt}b`CppbXgO(LHd8IXfdp?Y=kj9Tz9)b*mGvRO$DnEsvmxmJe zZp8t4{0>*w0EeAeaf8#I1@t+$7zOzMri$f=4BOHNDV10qcvz3XiwUC@; zC1MYyaU)boIm6%$DJXXc%3my?cyx%`N8pWT*+uM&Yk7euF2r^V$n)6#h1cI647>Nu zY(V`A$ir1N%HRtV6pY*pK{6r`trd^XvJZ31EPhA^{nCxM2joh9qCL#Fu^jpRF5!z} zPj`zx^F+LOOWCj|b7PEGR$LE8^K|EG&H__GuNGTzBdm!KeLyIqdg3c0EIPp$qLjh% zDcGE-))jV;e%>Lpl|HQ8e}w$CIrh`&qdOMZjni~2Ket0R>{?H03EGj+gpxudp{6SM z1fb0vaLj#yfKO5zLi4Zm;4ER+b``aZe)$nqgg-M9u3@+RiQe~OS4jF;Vj-L+^?N_8 z=VT-^D$pYRIyhGZl@85_lnBZQp4p@r%UVB&SJqA9dOv;BBdW-sH(x5{DWK}w-P2XJ z4Dr$4X{m;}wc$2SI@PaTn?p%4Ny-W9@ovj00CjE0mfQ3you?u;8i6&&i(~M^IQbq_Wa}?Jl z^w&1YUtr(gPti@T8R=Uzijtl=)^0t{-q`WPfjX%TH3uwefVRHhLR87q5!V&s61y$( zoiL^DyD+OykOL@VDy)uUDzt*Dl?>0QjUl>%zf@SUD>5u@Rl|gs&|`)lpLBcJ7W<{o z+tCG0Q)fI8+xns|fA|n;j#@QK<#$$s+N3TI8B$*{jI$T^~PPI}gD8DBrF6e0sYkQhewg^ud}Ob0TTQ)ou!4%5 z!dj`5pZr>c`$EnU`9hX8H5%$nm|+`7uXDxE!i>&SB^y7rw}9^EB$N(}nHPb+$m786 zV}Bjs=d}z81aH_nfBrxxvS2hEm!dr{uz@0h4#{L8X^5{4AXZntep{SvqE3Uec;m%o zs5wZ5#L_;fK7mIhM0?7qwM4q^rZ=ih)rZx>e`H#d!@z&E+geh5(Rq2puQtr%`BHfb ztEwXU=|vJ)kD=qHH0XtdfZsXVacH^i4baQx6x*L}g5MN_9|19Kef78>`Ovl>3oNfq&c=&D@8)FL$Cu$&F|& z%OUpw4T{58#h2q6kK=I+}Pt3?mtF#T*)*2X43KPJ&>gs(S zsTnZgmO8qtsIXXJQ~z7NFmCKzYu&^&iUxM*PASK9Yb-5F$<-=LQHOJg- zj3FkxrV4VglEbc6uv%?rJ4+fH+of1s)+5(La&(W-%xbhTVyJvyBq7O~tW$bOn$fKO zEf+!2BE;}rj@@m;n{YS-pywTr+y)NcV$?z zE%sHE*@sl%Ss6mxnyu_C7#VguGD#)NNV&h{LTHGks6sMC*)e3_%gK%N;5e|uH&Ui+gGTYC zl=ZNTo#kwn9J1tqhucgTT7H+0`tj6Ii-RaVC$gs3T`U&iWW`F_M|#UqUn~(u6ZKFV z-fL~?5pznvN;tS?s$lNouqNRgjZknePg5sZykft~PPk8S1b8q_>%oCVxZX2HiLFZ) z1x!>~xfBkWKP9JJY{L+D z^CIlu@HI#J^%a#fUoGXatWk|qg#{$%6)$wo67Y7Gq^!S;5c&PIW_G%C+K{H*wvfms zZb^L>QtdPfZbAf5A=X7C9Zg3gZT&?wg)ys#`JOyBz9U}@Q(p`&2(nRd1rVD=1wn*4 zOLnLym>U9tXePy&n?vKWg$SrKjO4<-KSPGdlNWpn-B!0mWg4c7LZ$^+m67haaa4v0 zPP)P+?6)3}`TuMLB7DZ4WI3NbIhUiC`Db{NbhEg_B`L6{GC`1#dN1(TMjOgh@3Y`) z*#xc`w7dDD8C1adzhCX#8j`2k?nE21r#X^h!3)0t{pkTX>*{dGoO9my%%Gp|I~Z2x zjej1I-!z%=S5~`Y&p#PV2|FS;!TE%SAvic?HH(zM15QZG{?aXX_9-5J=FXAZZrFVN zjaHH3@mOKvuEDcH!^m>|X)-n0TD|O0izOQ_R2o7);88mvr9EUmH<4P|?8miqp{0GS zv~=tQBph)H!22nK4E)8qH3*Bps6Rw2L_Ao*n*b~d2DSwLg`v3xlR_J`E80a=Bg6@$ zjk@F|^KR(ebI_0O(t%$tgI3=cN^vknycUpd z<0KnPOpa%Ef&C>WC^J^f{uLpZe>^j1p~;gDo~YcEP7xg3xu^(KcLjhw-1e9DjM)>Gx@Erw11#J}AF6V0B% zz)vWV&G)VL<#*%!kD0;5Z!4tSRVxwQT8={s2Y2e7J&OHySXAhSp&1N7-*A$KhkY&g zXM3!Mexaa^^HB$^9%ZStq3VJ2!(9T+9yAyA8*3~s1a3Q$tHdJz7YIYjXBmEZi#>T?We7 zp_xeehp%KfN#gjY1^hIy+Lw?-`xY%gb9nT|4XfZ62E1_9js`twM-HoC#OC9rw)8cZ zq(J8e>h)C$@RBO{k!<;pN@9{8*S9ySgB75(=H71DcQs0M_e>BJpfTKj;{>&RyWgGs z;!od~Nb>tIl0GPmq~--KsCvhS9{ScJWR2+aGB2rK;vKr{4doJeaem6b*lyF<-JnB? z%2!RYJm@CGhfmz7-gID_BPtb{rD)(ck3YYUCqb$yxwXo*vPE=yHhEj+t@d=8C!P2N;Gmm^2Wt^WOOw}UK=v&1hzR%Q5L3+k=5 zNmt+0Xh<PZXDlw?!OFAXrDJk|o$`F0C&PnVM>+pU1YBo^W2(+MoF6)lYiA$u%-d z_GApr?t+*gGH$%s`i>V*E>r;l4qCa4iK2;yhCWejloJmKpgroqviJ~`TyvMcJBjKe zHTsp#?0zw!+vMvD&3x(Uds)&fFa>$Z7@t#8qP`m2Q;gb#BBygG-ldE`7iWbIjK}%< zTGgGuG@>aPY32L#_FJ|H1yXxyCSl|v53%+v%8k=lEqF^6cOtx=`;{Gg5vS;NUs0|~ zmzgLz0&5GnygkJs#y9cLHK0tz^l3Sbdn&Ip`6Eew-O#?=3Nv-j4W_>eraGB@-kKVV zYi(hO?IG+}ajx^`*lpZluv|6K^w1u~r}Sb}ya69)PGBE3!8uDVwbYRb7ftc~VHm$@ z&hFyGUU8^X5;&J(>^W!Lo;FhZjx~~u8%OtCIJ_KikmZKcNb5vdIs%A5IDdr5mNS}( zi60bgLif@ZvAxqi#7C{_&WOQr(xUWN2G0J4D5zl<<)tK4#O{UTYoIint}@ThuU3X+ z`9|kMX>j`%1<7usY8NxVs(-);{;O)&(B2*xuT|le*M$%1bh)dYBH6d4(dp{#cT9j*CiVgEY}b6 zn>CDVwkl_m2i;@sE=Wex{s|k1f)~-ku0#{P>yl~9N0TYlChvusbtmU&DAUc{&Dp!LNvu0WIHvxHMbExM*CYd` z5EiB4H>B4`bD7ssFGcf*O#B|aaRWnAp?EsjY z+>KC96uP|4>uPMXX2iBHdOr4UcnAV{QDXZ}h5hnDi^uFNBnu0dRdb31vidmcOrtu} zkTT{aS(pe8PHO8++|tGXs;5OZ9S6bDP(k+Y(_4CcuG$X+x3PzKEkRn^D?$p_M?&Tp zLFS7%CnP9;K1r)u@6|`}$M6nL@5gW%IQj|w4HMrMflYglIa$_{wNxf!jL* z>gr6I|ER{ZjqKqiB(TdHt^o!U6)t#gG1XMmFiowLnJ-njk|7V*^NK|5!@Q2WN3aOb z#&k^QCT}NuUrmfn<^ z(sj6XQP0W7ZQ_xpIO2+**oP?sI<^Lb-^d#eF!=XRHuWxbN}RfS1SM!F?RE$KT`dW!i3wB>`^pY#!?oyvR2QBnjQ{ z_!a11k)#og1%o$S8^9?EyyroHf7&|);2r)7<>-<@j_d#;;`}izj10!1u+$BFPmJIY zby=OD1Dwb84mQs4tD*~( zH+kZ4pl?v2qv;BcDoiu&jCjsB9a+~h$m;@eEIORlbVvotOW;6Z16!=9!zpF8L0X}> z?J1^xR5NYtu-+mxptY;CAYHKs%xVo{6r_TwxanVq_~DI z7vY17=_4d_{s6wae$H?gUbhd~FE6Ieo`m$JIU}S>DT?$GxSS?pfw|CL&o!j}>Yuy}qeGC1D0cgSZfm!18)!hU_SnRukP3BrFB#5} z)^a&zw4Qr3p}{j_^V2hL(O-v)+q#J^c1q7Md)TV`T0+Va-XJ1}+I3iO+!m?Ts_D^~ zG3nQ@G+>`hlap`I{x8b<>|Y$yUE{4PJ7*lATBwJq!+L54S_oWH$EaDcMN<+D8JztiCfN9>4AQvW+rL`Vx)m3anWbUIZlTAc*ulubczGu|U>F z3H<9>LjvSVi*_~|g#xigLgy81-U@M#y@D~E1wgyBHcYs;=_}BTpWaQN%~&AS+KK(? z74kbyM~v0%;I+|HgT<<}ANB`*2@;kgRGVT|n&LQ@;sv!IpCZtt|D~NR#D~qxhr_9? zEk1R2D6aFn@sG`FqM5;aI1{-Ogv{yC%)^IY2$!~HZWRvC!~)T$b0ea9*#1{y@hPB< z3%RLc6F(q21P9;FL6sC79-|f6d1Rw`>qU^t$a262Xb zMy%ZHuQoak zOsDg@wYS*6!9U-0UMjD7T5>iW(_xPQPq}>C0U6H$+XCBsfcNc&K4?>dFA$=^O$Q=L z>aGMkF1zB`51ZVmtm|_rT_)9@f{Hr;_hD)$wmjT|$2C;k88+acPI6yCCyIMXFvq85Xm(;dV zTkFH%8Kc}!|2~*r(b&~@S6db1(mCB>Gef{vUO)tN43n;rWV+_3sWTtukW?w+IrbZN zoa2B8WeJ_*l_j5A(F_18_0pcImRKzor2i)5S)}2GU$JI7@eW_$V&#$}?R~XsU9DC( z)*Gdw0V^&DKumt$(=A^8v6xFU)D1JkyldW!UHmj+)t-qpqL4eGtOKp4-6!Y9CsR*} zxXMeBH~Hu$*allHjWDFGGT>EbWe6kD97_zj={g;vryd;l`${}V#J$S=4bF2OY~=6% zBx08SCeltEa4I5iaj}sJNa=PJQY&EVSt!S;2D11lwx|+&&+vmBFfkY5*h?LAIU^15 zir<~-Z1UNhnxlNXvvZFt8DNE$AF-AgH=bYB1Fs466`^sQEgMV)T$x?cDXsMebvnb} zoWIwSF_VALUuuuS z2O{|Y8e4bHIuy2iTVOUAUiK7BY&ggL<(&6fW-{uHcQuGiB;fWl;n_4JK`h{VU$(^Q z3pKH(?z()*C)NaWW`07fuh{6n_l34wtiS%KkEKu)j#mKA_QGu-UJz+>#*GA$$owrk zGu;p<6>(B;tN?Vpts9TW1;hGQ7K9rN2Am zIB~jr*$~*o_m#-a;5{>P4?GM!0XNqD*oP4YiTlI~j_&?sE?sn=Vh^uTIpOJ*iq@^*!Uq`zQ)VmrvLm9-LlAC0V zh(DNy(8m|eT>fr18pPogpfh00D_UJa|eTd&b3W*?uB1J58eh>ilm zTduWD-4k=1n-RjcmF{m>JZX7!t9cp-X1!rsWn94ZIXs+?6dGVw=)QUX-PS3w)_LA` z$1lT+==E9@WFU9k3FMkspVl7g?mB3M-^11dz^3=OX5?oN1hzz3s?X_3a#XD_nrCSSVBbz^**2)QK%ltBEfB~3HBRum z=|OvEMeO{3D_e}+>mwMR>8rzHBD3dv1kYcs>rFJauQP{N|3IJa)3BpDJYLiDsfu4^ z{zs~I+feFRsxx{N1&C)e6_6WZORqn? z26rnQ>9eTWt)Y2RvxiKt zlOS~Wz#Pu=12?K2vNKXl-R+7>QUf71W~RtyZyspe07%ffy`rxf@cpKP3Dq zob2A^MLYS4GWz`$a*L!VX9y+}{syQuJj40&&ho#n!#speQA!LjuqQe&Fw+0{>{Fmg zDS%jqZ6Y+!N7GYNjZoqpwG`-M#NM2=_{pSAWTa+nqCs_Uyr`~ zK)|DmijaaN!fOfYqnjwcRCXaJU_R__7I>ggGJf2Fns(kCl{51khLg-x8{*1ld z>y6bpxni~d%$-8Fw&IDbQ%~6|x&_2I%$r@CS_o(sPHIJh%MSf-7ks*$n#(laLTzs-_HWXE+_i}78=OfpcB--QsIP5s`cB}fa zpW!0CGxO*a+NUG~q^iz6In3Gl)HO95X7Dv%>^*tnudMam4H;$#THtfBb`4$h@rok6w26)k zrkr0Rm_jg04AQBvzQ8v^`=2y1kEYOloyTP9%Z%st&)NO5R)$O{1Xp)|%tVt>T6Zp_ zNc)eoU-q4~{UQ(61-f|S%Nb~UM=c<52;%Q=(h+zf2}P(y;DI|;B_N0RO@p+eKp24><+$7V*a7@jGp4}gH)h6w= z0N7-wlFOq+d^f~{OxrvC$>|Q~3Py`s1nGqb*0I)7GoA-wast(`n<9Matu4{pX3!=`*eu&snF-_rq%1ls$oPwd<~B3ZzGqg;3worqYcemH zG8KHM2AXIx;>;7pP8&3ue$z-fPUmXie%bkIr}%FIY4znS zl@G8&)$_!C&~Yl&1F2Glw^CioWt*OL1KnDE=|3y)yn1AIS;j^)wEFU0R9_haAV9|! z3|uZnsPEO|Ci@K%;f_dXQ%nx_3~Hsc0VU%+w>+qSRxz5*u_RBR!d+N-;GRtZzD7}xGkiq4LFPf z>Pvp48`0X{$EMu3$qvZc--gu{eYARU)Suo8E4DPQQd8z=*&&_g>9k|+`m<;S|Hw=EPKOsX$3_+NB2L~06(0zCR#r;#Y+J+{p3Z%!a0!iB9q%{b}XAE zci+D1$G5+0bxhE;OnTFNbBIQsQiwn%LXOE*CuB)z2QSI@F!w81D!XQHp|tgZHWU14wAkv40AS`63v<`Kk*w4ZDK$XRGtls0lI#b^ESN zK`SWY88*#EOL$<0?jtY_NNUQ6PvBq|qaSMqVJ6X*yCh^dX-5QCBb{>cUNkUM^8tQM z60^ppML7LI{N5^1ei!?ZEc@8Z*$~<0XAvs0xcQHR(_GIIv-&b+y2_ zkuB{HmHJ#1#@X0DZB(6K;NombD2I}AKYEHQKl${9E9*+hs8jR^<`L}IJX%W?TC}Jf zWzAmYrREpf&!U?|tuMHrRd*_{OmUALR)ym(_cNM7k=s&8XL|3I4+3AE13y(?g~Uc# zUO&kc607Dkzpw%(e_~%u5&|#dyeMMY?N;gd{AE9GLOP%fW=T#l!bLP+c>?0ce;%$U z86@`76h0B1CH;_jY(F_r8I#EO+Q>NMSR7X`N$2Dq_xOS{hAp%oLi3>fjHW6pae*w4 z&rbCk$yeV4R4*k|;4LJibbfnPT!w=x8S+*}#(Rulm_t3Xa>n)s9s!$eO8+S9@?HBe z7FNu#x8=iNz^twytZV#!aqI3v9*_%5=-7AV(V^wt*I;IMHH~;n2)gw?`8m69YV4Pr z^J9$o6yX#$G0N0^y?S2SHuWsw1e7Xr;%bH;RVsCpkvfhvR+^MG)=4$lj^Pl&q5!Xe zFLaCj%dKqT%6(7NHyW6C=*d@7>U{Ar`6)l#m&{RZJ{KBDZDm^PVO2G45I*21@6@|1i@p*uvAhX} zoQvu}(^w}0Kk&Zv2j7vj+@00YfOPZdn`hOy=Nep=23YbU6OU$&KKtL@-}t(_ z2f^i%DCjis@n*!U9)bYcO47J3FQQS{3h85K#?!9t`xsioWT()7o~-bE2-qrSp-yfy zJR~)Wh)Kj>2cz-E0-t<-gOfwG;2d4ch9N7;&-C1a7r+rV9#2zAQh!gYJjWRsnlGamSXEn-V7C z?^XduNbo^|$7x8a#;c^^`UrP4a}yAy#Kmq_hmo>$HN27`&EpcBUxkCaeyt01!QRZ; z_MG9$;XuTDTW+lVOU|xu6jsbiZ}5R>zX2FoD*%it_gtQ&iO8*nx#c;EdBSp3I^TN6 z>k2rBIYmci|Im?rEA@Dhi|dNeY(s!zJzOEske5|fLw{l*#MM~}a0rI=w6J(wc`~Qw zo-RJhu38^lo5uOQn)DT1W}1t+Jua8wRJsce9e6m8_kh%erzzeV<{T0jsB0kIK2J33 z2>sBLay3xf$(hm@-3}IrQ1ht^;91(~IXfGSKS3}%SPQj_r0eniQQn@8G8<>T&HlGE z`oXi2x_!2wCBs@f!sFfUh#gq;_o@U~4}1IuUvy9#C?isRQnAW4>#lqbX2%udqSwfZ z3q%(5Ct=Ezlo<>e*x6%1S)k(r?Dhm@pZ|=!8yp{k`t&?YZzMOm2VEfF^_94Ur3KLw zb5Gc3hdqHuZOUWVG88r;G57p9n)S|B!Rc2OIPtXq&PVRajMo~%e`0<{nbLKl-UT_! z0oIynF@Q|#%ci}JKyf$+XidE;d8eb52ii>fF$sZDkeN50iTS~*D;65HCO!?;LZz0v zScH>s7C*2C!dM%@)x+Fi|MH*;%;$*9;h+(UH&R_QUSU$fU)MM$gi%rEePwxT*Tao zt~(U2vD9nSC|%TV*5X@FSRnFH0}$rP#nqfNSQx9x7YcGrhEnjfHdGXki{ONg=Jss0z;ln%psJ!Mu4XaESHAWS^1Qq0t0&wQ$5r95?;@v;aQEc3LApVdZAW73_`rq~ zSBPt2f%b-&y%g^aWnPwqf%h@^7>Oq0yERDS#=6oAA;5znZPp3)e4Xs34(Q1}gb#m% zUikTqMz%tgPe?(gF$mxFEBAXB-p%RrZ92n%6=to{I~%P1UT<#P^G3eJ$!mzk8p+-@ zz^`Aa;zPLOpy;m!=^5ie%=hn_i~7cm?!nW>6I0(kl^u5Qs+}IOYD3TA&vtlU8v3k) z@i#s|_^(Ly0?*3)|9-mRl>)g~wJrJqpAUR)oW!4tiz*J!b7x}q&P1hNb?m@Tusjh_ z0!ocm)BX{Bsmb=LHtH90tnjqZDdxq&{`8==W+;FZ`T*3_yKVJ^H-qv0<}yOgx9)kz zqjedMjQ-Hr8+X($9P;94ip1adZU<;MjyP&)YyPI6{$@?@O{apvctDgnbICxYqXzNG zcCrC~)MFirz6Ke^YpEf@DB2Yiew4wj#Jx{9-8WQo3shG@aMC`MoloRO^lfj5T%o8D zoKq^@PkToZmIa2Lj!5gdnqYI(4Mx9s6rjkqwdsm06$P0RM%Mr%}8a zprVMEph(u%z_n3A1kh!E9l6!xfSsY&&3QQESCC(S!l37^Md`DKfd)X#Uqs5CxX|$L zx9t$c6D(fA1Tc}AIn6>Rd{qj3MK8KiKn-X9me&BijPt}o0C8Aq=+xn%vY_U!S?yz8 zu2zWBPAWT$F;)xqHxr1145S0)@kgSS%M{)I#qdG#j@!TJh`t30kVJrJ+#L2UPx*qtGe;H&B4)Oj^T~`4W=gzc&;_gmyFYaF4 zio3hJJ6oiSOIh6Aiff@bMT-`vI26}H@xs6DCl~Jh{+xZ!dEb+HCKH)#GD#+GOeIDF z+r#faJX}=G!75@x^Ps4P9eQOk*R@g!Wh7)PwCVS-_ABBYPYRUEaF)f#;k)mZ@G9TV zl2JpP9nWHzy>Q=y(4m9q3EYzdzIXvJM_N+5v(7}iSJ&pNJJ}uWaZhoF&1!Z&9Tc^0 zAR$WqPUZ2<2N;i5#N3L?HR(~%H0Z^4`%)ov#l%_|jbHQim-=0C^O3mMdu9{2Le#rx zxfg!ZCXevCIk{CgSabow{} zoiDnl=haU#5|Wl`CFCB(!@V(LC+?i%u}^hN2o=t#cWu$#D-Cfb$ipToOkr+&=Zdgn zqCIW^$IY@*%(-Keg}n(WX2{;=tRaoMKRn4+=K9>x=(d^TD~m`CyYX0 zTdx8@v+tKCl+OJgOPf{~4CHgeX>LSMM*Y%x&a+NNGMXPB#t$B$oKYX6*9D`+6RQT4 zyQHEM=zCEJvb9taj}&yY8RXbL1B?e1bqewFYb-oXmDh(oC4m_Xj(yI=dTjPz06V9( zbiyxtX-|jnh2P;x-Zn&z58f}}D{i{6`y2K-;24E(M6pqws$v^qerNe|ioqA+v7vLPA=pJ*7CJe zi6K}0W!IFSrhUrJ=8l1v5oHm5w`G(tdgFL8)B`ouiQJOCJZ8!4aT$^!G!${^$$N&X z6WPT2n&|0t-^)DR7aO9}h5_5@CM^4QlH&JB*A~m%79{q-B@|HUU5UIW`R1qLrMjQ4 z3pE^Wt)JNXOS#KzrY38*0_Qf4th=4B&TG@{Ee_}bmJM^GVtuocUhbz%?Wk=L&g=F8 z)i^LrqYdt*WUa*l{n5-4Qszg)+%@jfWF=F{Oq;+R;6zBtK z>b-C-Dt(NEG~l(Rxzh$<3F`;)C>z7A_GGSmcrQ*txGb$!fXH|wAb_m zL)O=66;fwzD4pngDIW{g?ggryYtI;QI%io!bXNA4wkR0_3)TV6*IALPcGoW+O4pUH z>w}rm=4nPP`bWiPU1NfCZ=>j!iJrMu5?(=;ch=Ci7`t6FRhZ|c4B)#aPM#F{11=exqNOp*FoPempt#@KSs5&xhK1FduP%TVu7_qMIz z%JfWsJK=#`Q^mgJcfRTb%8lV+M*KiMFMc}uJ!MB5@{b`_8HA2V;$I%JOyYj9!6K3N zYJbse>#S`4QPbRQ=U1lUeEWDo&`E3Fer2DfJw`%&6BJVpsK0?mc%Qx2T&?V?OsHL` zI(EP;6bhQ_hcTxjg$Spre;A7Z@6V}It-SR%vvTQWUQS4vjA{>w@dK^9bmX~h*`hmND5(2V0EqG zo^51&wA)V!_y_@WvQv&CTP0Fsm9-HU5bv7kXCFmOy1Cz;i8HpYjxziqd!IU%ZR|Cv zm^V6Ue&LPWHETa_RM1&h*XA_#aw@(|k&(Dw?=VIWlt__Ss1N+F>>^Nyr?D(m5H%SM zE5ZCdi%?mnQ^{A2hB@@%BA_k&cp-3#OM)5bnO8LkFq$MpJ)&q*6^GN(#R=P#=5-I_ zRd;Csjzz8CwGLeF^MqpqEtNv30w*xX(2{x4d!MF}IX+pf<{H9)j0>yq2ZAbkaaON)f@)~GeLz<09s*qO?xC3S7xS-#6}3|W%mgu^(iry*Gg~l4+rqRS8rZyrSu;OrR$Jeg7ywS zU}08HPBSx!BXU~9;9TA3g*YUfgg)`MV^ZX=5Z>~`m3uqWHb;GyyGQ1jc?4SBAgeu8 z1uVt55KF_E9h=vIPY=BcKzI>{Sb#x(UezRd^ z5Fn?tY=@R@LTvBC8>CTf%4tY(#-g+CCA;=WosA_$Gj(Q;6H-l<-Wt`ExyG7`6sn){ z)*JvZZiw3f);)!IDtyc`wRC+7r0TC^y(=)jc$Z)>YA0mCJTMI&iBmzxvVZc8 zm886dN6;-oFK4D5R8?13tiOeB7E=-O23&2dg7)M$g zb731x{FUGG<{kSdn{geYum&bL>eFSLN3j>NTGjS&cuDCB?X>d< zD2u}25T`243dPQK(+}E!LuR{+$!|N6iP)xeO4caeu-1-I0?bW(X{$;|dfE5fmZ!V` z1Tytl3rx%I!+g5htJ9mPDjxlkL9q$HC}SP%VyQtQNy5WAjtb&Fi%>C=pPB2E-)O$< zO=0HyxrcehMr5)_x9P|8i*%>pJ0vam*p)*||63F`N)ubfSE4P4+)Q;4o#!cU# z@az(GLAsRkkKuUGx^Y)&Gwia*MPyZ`fEW6!Dp3eQRVC`WQf(h7f(jAE`yH!QT!W4` zKd00co7wMCk5vt;DOko#109j{Q=1&V94{;GTRIJY<=#CIs?s|#*ml+EqdAs+uUZSE zMq^$kvq=fl6p2g>ql0sm_hG&tl|^bhJU2Jk0EcuF3nyoT11D!QD3ay0D7aeP9}wdN z4Xd=G3dNL^qWzkwD8|7NyPEOaJ@L@PGHXUa8Km0s=NIf3hOj+?x-|E%2 zjIUOx-CKyVI87MHtz2ZtrD}Ymz6vmbZ%!i}Rul2H&}G1~5;?PI${HzOr@8^oP^2_| zP};K;gVG*`zvBlPjAPGv!BTMPxKeLLF#kfklTPDGYKPSyvmi>ZS^ZA^2oRs}- zN|Z0@08-{m_jq+Y+Kcbhx?;pI(&KBwpHF;bL@WYUcBS8{GC{Du6^%u~?_mX~=)dX+ z$&guV7N4#>>gD1|4Y`x{2EHWi5f}e;PoBsnbtx4l?P|R?*9_;e#Dvp%H}ulCAWV4< zbyDJ@tZAEA7eAjXtm%C~g9yP`-X=sA)a3gYnYiAe2kNcR{mX$~s8);jeC{GWr;}SP z#J>GPfoP366MS1&TLxBpLS1|SJk6^IK73zfyqjI=_y{-`K9O5CpbO_$N;FbQf$uur zE~ukhwModgLq?=J2Rl~b4bXhCDnztQCYbe+81oInWCdshKj9usZeXg{w4%3V^-UXu z-7#^tm`yIwz0wxN-LV#=eI42&Q%>3GXPiSArT3^C8)989Hmvl!?Owg(BwclzW0hxB zd8OFxm9*IC4{20#DP`z)ZuEStKZ0T?^&Wh<;s!jR|CjeUMN}dH$UzB96n)_F+sQn|edgh) z=Qz*#b)jeP7PGB7I0bJgP0H7Z6JWg}=lap@p(dZ@`$ zV-RLi<6<4ijxvA8hP0Z65DvC&tod`)J zS$`}I7oR%v^_xY?I0;m5T+?|VM8QFxG&FK#uIAeRq&IrIef%MY#{(r~kOMh0ko4m0%Bp5b2soZ=9IV7Okuq z1*>8iE!c~rkCTGG<-=44klsF6s7XZ6i~?D0xaebT0I2t4&m048q0`(F^;5IRMn|1{ zoTsU2PGyi*hn-1yu*qBq%vBNCMK^K4Z-r8X?P&0itoIvwa`A=8>;=#*m9VnIWNw9N zCofdd$v|@P707kD&@Bb9L&Icovgd_pGAeK1(2J_F54usyXrLq{h$hR{e}yZgdTlEg z-+-*jsujFz3x26nOrHyQJq%^eKfUw|>3PFlderFC^NXm!`GB*=X(Q%a zxM#4~K;Ew8JJ4V}`4K@VPvPWF_%S{(%jZ*trfJ^A`Oei!TiR8|=IDrC`;QzvBiI^} zN7VIN^p|LxqwM>q67WjH@Ee)P2uf#wF+DMFJA5ak^&|G|egSjNH3EVt7v@l}VeLpa z6sjBMmn);ae%EV$KHj8mtEByK-ooPoq+2s#J>JPXXy>QzS+h59pz3pWW~6(s@yAJb z*0D_d6Lyr&PWRA-vHGnR-j3H^?^qmu#+&~f)pko!-GSYovT$Er)1@VTO*n1@u)5?R zZzD59+fEIT?dLgFfNg)ZiMVZ%=)x84Bx}vLl=1TA{t+R;F$pm~DZxIG5(-MOFAykA zEpe+@UNSS5nVz%%Mz1(Kho8(uw)s7auI&nc@wQxg=q$tAD)GISXkuI(9@f{TVJ)qZ zX~MqN{sYHCn|tpA5kB<$s%`GA1G@9FbtTYBU=^8Dr9?TH3>f9KZ88k&F7&O2mub(5 z7*(Y&h!<9^<@cp%r>MZ28GnFo6GNE-fP6E27Uc_>vp)UmNbXhVABDV-(h|yaTi=(6 zD}aEqzKXU42Q`jgtyAkUJ^RYLPeSM2G`}S7;s?RB#=O#LYET-tdr_2z02n3Kq@ACY z$$78hHlVI%wYXs3Nz#t3R@V#pW`HG-7!f$!t`j3>Gyk0hNeseJtL9Dr&2VGyi|kW$2lGL9Nzfeov~(lA^)9^W}gYIqFai=@)}vVS2JIf}5qNKih6O)b)}#Yqq8bb9N|{|B6iaVL4;1ShLVCc+hw8 zE=_E{AQ-J=MUWjRwuS)+^2_#1@HoA4jI~6eI0xd)jH&L~7p0dOqbNFyBd!Y|c0`@j z_ME7FYx%OTa!S~y*^SYr+pTiJ;GH^3(w7=cx)xSQdq6+K+*nHgF_s7sk?b+>b9y0@zlF>1|Z5klI48@ zfr4;ALh!spqN@%DoulF;hcFvg3<1VeC2^S%J-(F@_*idew-e5NtX3x+_3Br9jk}TB z?h@>gjp3jN65yopIT1i|p@_UW$)zd5VhrG3%>y%LO z7gFj}{uj}X3eu#2Nz0=zEVvEP!ew>~rP)^=dzR_Sh81Uo$=RcN`#MVg=}T3Dy9>)} zcM=*&LR_7aY%dQap>SdNG?Rc$bg~l#yal=s0bSqtj@o`Y(T@fiL{GCY%?iK#Vm5Pv zE6+6}$d;+04z5TI1xb;0UHGw1J&U8|8Lm3VY^)F7ddY79CH)t{m5R*12pMJ}0>l~N zt1XSFN*VnG4~iHn)?}&fmb#nA9igl6w-keVo*`}`&r3|q!Lx^KiIeLmZCnKnxI?KSk;tNHUsE}&XE!HHYmY|JeLE}mNwFiST6juhpO_a z{T;7Nze z(wCBADc6Q%{Uwv-{vsy}`EtN6?GR*stBMk1t_9@RU8sGj&G(WP(75QtOa&d$6Pa&` z3MX-wLa}2a1K_K%CQ$HQAxXt#P7}_2LURW8VK}3u09#%1+Jdcg*&T>Q(bRL=I!j8@ zl(>`lw9(Lu6YG;n?n@9Nu}#c-WJ564R?LP{lgp@0GNImEcqUbOggvH@)zZCqKrtExZx= zg0_q4^dza!0_TrPi#>gk(If0!2~tTWpAfa+uYh&-^zBJe0X=%A?Mc3r(j`p^iO!6` zj+d|ivT^0DuP&%7&Hl$C%pn1_*2#eq)lO~7!<9j( zU>Cp*ZdsAU!ksc*wkFNr#&f1g73FOgAzf=sA&nS@eQ`^SzX?`;Per3+aTU({;wrhT zGSgsX$MmE;fbV!#`hqA25oy!86~JLs=+K4rke5!hx6rL)ijQ>byfLgqFf8PFo&Jpg z+tB+-(TL~%V zyL5g8B+K2ZME03&b#H1b=*$CYBOViJV~?tse*a>b+W2EQC}Jx^uXDp^D~Q^$8%2|C zv6i+=s7A7XJ1M*jLs}??2i=zMC+53El=v41OrVkCm&5 zxxEFGmn&$$oA4DQ-SD`a0yBM+0*l<6A=w#)v7s#nhEc|$5rsyW=avfy5QRSV6Kj9H zihj^jbN{+eKkFN?U1JA)(pmsys80wg%%=rt5rM56itHxFsjd-)IC(hn)1if*k%}5+ zClghPQ1BFBZ0ruH2zn;WX~y2L-Xp9UeDN~+mZG9Bua)zQfOK^S?1gHkkg=E3;+K8E_XgO8h%Ui81*PguIBJ{jQS|e7>3z;%=Lg><7S!c%xKt{vBiy^|6pE~! z(xeo)926QgV{A1h<(Cf2^GGq(xIoB&O^crryVmuVcEB-Kj0j7#L~&{rl?zu2tBiC* znn~HXU4t3ThDcr0)Z?=ehIHL88_JUtR}HSqRD#@P1sWu`hplQxUNQ6uWWr1 zxOJ<>5*#TgZEEM=K=zWL5zd*Hi8C&|ky@T*i0~*%j?T_6bL9$&>|$3hEZLs~G^v(- zu!~7A(@jRApJ&VvcF1O5HenElQLzt!qvQ^$^_AF^93Y!n)Y!(`;cSgs#@i|NboHt7 ziYjhn1sg<Z;})JpkTE{+D~)zKS(hcd%Qwj<~4P`B~AvI><$j z`*nuxN&I+*Jm7V9N8A}d!fF*jMW>?SR+D*Kge+Uq^uS!FaW zSq$Gp;oE$$C*%Ccd5}tf2fRW*WOiifV5wM&Nv@RFeN*(wYXt-XTzdi!;ve7rfJg>s z!{MeuRr4*|nD2fOrd`T;$rO#cwwLdF-VL*lwAp4(2*wEh(4<`)H|OgGTn~9CUEv%+ z<8mGP7qawH7S3>~rBFU%Nhpc17T(q#P1^Z=T+E?TK=pO_xS8++J=(p=TeIH#ON_f4 zK5XM`YGKQ4(FB`th#~W+`tT}nv1a+|P~6vTpLz0Em0fddDR?$r+cJQ@pA?ClbK{}f zNpNO+#iszQ;P0F^j|)ox3|;u|04dt9dtL>+)`xn;>h_+Sy2VvNSS;hg(7uK_||Zz7Vx`*VK0v$xCH6c}m?xk;WRl)ba*Bt*JLU9AFi2Z=N@PS9)- zL(gua!p?3=M54la8Tz7#<$6TERh&9u@7a1!nQEhJN8zkwa%)8e;E}_k6I+Z%Lrd6L zd89ab(XeB-R2@PN_mvGuz+FWmZh4Ji=l-$l6skk7rx2akg|(F!9wxBIJ9DtsEc&kY zoTE7WM;H`pFi4D!Owi?2>R?i&vp?rOTxZlRVi9&?46B9d`?^!|@8k;Co(KzOJ$;ng z8&5v#e>FwFc=}zOx&L%Uvp%khANq+WiLDgQB7U$HWER}d zNr7tps6c^X3;-2$A+H;4ZM>)k$;z@y93~@Ad86nc^rX+`Sf&crw}C-OE0zlmo+){XQ@{6X2=?Tun z*q?SXl@>7$`Ru+c)1=`%s_i`+sx6dB<~?0ZSkg6bhFWSUoV^eHzUe?kQXGp(tK`t)Z3!Nb zBd*ROL}7VOUI2x(c-7v|A&oXpW!VooMg zDk5T@Mf_|XE9Z-1OR0((AIp*QHV5niIhZACrGl4lmU;uIepHukE9#%~VP3p&omu25 z+`o|Sl=8hy>32KF^oieJPThjhVbUDc{J=a08TFv*9WLaX-4z%L2n`t&?$0WTW+QS#3lefCX7dp=&Mg*G`-3*t|QBu=Uo@VgmB!lbsEi% z^LIci7h%lEZmTa=gNGz=$p?wc+qLTiK?iJfI0J0$bq?1ZvfX_Nn$1ix zH443aTPDKz*-pMU8NzftWh>is6L&pKsABR$FY`19OTHD$BTt>d&Ye=X+D!pAG#B>Y zyO>%xt#dZ$uIVU>qj^B5(Yw=Kp~jB*=6cCbM}{iEHk{R3(C@V|^`uAw?+qr9e{p?S z#}|#7tGula)eW++14OnH7)3F;GR-X|Yw@h=wB2kPtmA#OgCRg>^nS;LP)#sv*qJRggq!|h+cab3Kr7vy2;IglMKN|*XN&4i)KmN>h3j;pRc+bi=G?Of|mt<<(KQ5U#Gg(!siUb*l=al|e<8=U+$E%BKEp|H~!cu2~N z!%Z>IcPjZw=x^DU;Ecp=Rm|^`GO73UvjoI9pf+edW4F9648#_*PB0z9@nl>&I(f;n zMTOgAxx=Ap*(fHmpz}yPs4s{mzfZpqw705@l$LP$QsNygTbGp=rGPjk< zki1i7e9XYqIQzj$S<$KGjVV8J@_MKLmU)&Uc{$pFLCzVvbCwO}_-W>aAWJOEYlocr zkJ3AwGp}MObiRi(t5#skMoxzl2e?Lh2Q4}MO(P2Z&Y$(>={XBeH30vY!xjLn0U9vi z<+MKcIdF%m6%aWOyry(MhCo54!Mqp!JZZ|26TdR2G_XLJc;^W}=VP6TJmGYXe`1$oZ%Qu6r3av` z+4{Xp2cQ%C1j_JU-iFn>R!$su*H(mmH&n{A4ekm*4H(yAIAA{K`GVX6?wF}A)q8PF z-j3;({a#w1hCP|dQ6ql_q9sP_2ED7M#lpy=y zNVfd?-M;!IYWFW;cmo%j2!uic)j1yy`}>`ddq8r<)GOdwMr$AIw?`UlX5u~Wo`T(? z3Fpy^sBU&4uBhz|T%k8F^m&piOzP|tIN8Hl^n(Fp@61AHA&<7`3uTl%AwI^q?5^iu zx`(V%N(CC1cn77P;TE5vO4<9JY1u6gW_PEvj$!N^9kytWqw_507`K_GgySIyO>{5_ zDgXe8rz*(jZ00w-+t<)P{4uG8-)Uq=z*l-idLr03V5(sZkt~tNV6|wNJE!bgyzdqI z8a<7QG42`RG@%&1H6eC}G$MJ+%sT(@WiO1sPjxYSk7j{t=u@Q`Pc!o}q&{2BCZwf} z2rvvoI86F|W-tB_GI$4?abkl_f(*)62OLagiEV+uwd3Ljg=al^yesFkVaHuW9_G`Y zKQCYm?&&vo$^A3D&%5DgdNEZu1c~*R3jnmoUM=t!1STl6m4@}dbG+|=pV`6x`yL}O z>3;)01c&gdPH-SgASRgZcaHxGd%sr^Uj03#XV)|RMGSr; zh6GJ^aw0v+2S~ULA1uEnEI0xO1iqaFe*4{ck^|e=mf;{D4A0a6DtRfd7Zpay#|2f>3Gy zT@c})6#1~WYW{9=;3iD^7XbVgAoBR-D|ARt(ufuz*`fYLfBo+k2aefJqX zjm{r>;f`mO^K4n|89kK#ANqf-vSB?<2v&}w4T|no&o5r!2klVDU0f#l}7&g zccqQmgOmn{L2DLxAm`68PxDI)ErUz|2{yTbMFAg1e-g|b|6p43(f-M`z3(^IUZ+14 z*B;0q=b>j@*^MmXiov{g!4KUNo)8de9$*Y52*n8Q9~qQtg1-`a0d_tN?wAFhf!=w7 z;=YJI7260+_-ny$k>UQX#6-SeS~`%(Am&qg@k!k6eK2o-a0e^+j5k`qAA!26i2fna zvzhcWkXjHJr0`6!-~K7+vyeaBIzN*?i+t1jyS%WX|3pUhl0A!jJM=peC+<(Aaz8An zZ;0rr?9b*<&%}UF_%DXF59b+EjQ-zDag+W{@Vpb!AN(Uu%74(jYVNK!j#mG=Z0hfN z|7-yJEcwf{|1bdE^*$4s3CB7Z4qQE-z%sBu!%Sp?SibN*6IJ<7W1`LZ!z`|k@@d}R z6*b^lf&bq68NmCqpE0t?2h&rq|8JS~yd6^$!A)ZTJO+3ULvI9C2hjbaszF(8IBj5o z$-vt9>RCFwZD0Te=zlcwC{ZqZf3WHxf!h`TGt6-(Xs2KFStcune;0XAH)y?1;2){~ zcPs?v^1MGz>ILPsf>&GrJs$bbVCd-(2kbEPN!acM4~>YiVZih4-$l<3VFWG$k+Yh*{7=(x>i^J>gx5h zTB^b8Gr*CQ<-j4}KtNz%KnN7hB@>Z|k^YAp0&Ck&pfX#6UG~ zS2uHeWfw;$a~C&jbJzcFUfv?^ZdT?FZq}y8ZjLUDrgp}zuBB@Bj%Xq%0a$>D@x{YR zquSKXH6QhpD91%3JlNPsSQdpU1$iNRV{pqlPcz5F$NJ}Jd-ezD_u`ml;Zzb(^t<7? zYyPJhe!lLvqqFrpkSQ-4ve;l)AUq_vEzLG(V_Yl-r<(TKEg`yIhb_&{5bFTy0Y z!G7hh@D4S8GwGF~G9&FO-ypAL0UoSJ2BB9Pll5V!H{{Oe=Ku`(iZ*PP8scYiO2t?6 z4OCTcGP1iC!<(u$n3VN>+7yJfD-x8Z(1`Lw;v?sM2ya*vog(39yJGGHP* z`w3nXCrwZEMy=BTkZqcQ4TXTO*!U9!Ja!;S;S;Dd*%t(t?qgGv>nwss=i4y`%*dEA zBM;Tt{npAOQaS~rwWh&h)h@wvHDjS~OTA3t{hYWXBSqwIP!5*!yoc`Cw=o+R{xc-T zzeGrc?={r$1spb?_}1hBg4WFCfQWerKYK5@MEK(@eddMld?M&6`qN9uFj;9t0V8no z6lDHN*?6!@lBsLky6U7RCI1dp(&~B+3AyK3nP7?cFL;6p7fLc>?-Ccnhq*%j`64(I$a=~ zmPfjn)aVCj#|>J83<+PfzJ;k70=k4sfXFf%$7vHq+u z{cm$kreoOuKdi4gjW`z!gIBmnkO1A*96cV$2lJi&BPHeVYd2TT)IfFLz7_OAmcnI%N z(8JIuE>j*36Vb?Cdv;nMA<_rYzq7l4pPWKJU#o~9$VbT}ZH3KXs3jvyCsLj$1_W_*9NhRLY+jtwYV(lJNb_HX5X=A! zHc+#$EIe_BaN5LSCltInEfa_?;^F|DfDE*?k~nJKd3Or6n=>CJcQ=YJ%23s_R2IrI zI!VSgTfMAA+eGD5=Gfp`9FP1WYzD;bE{3b z1#y}(kpdO|CxsWfMOqXG&8%{Fba6;kswR}X#ycBZ)NZ+UR!91817GdpRPCu2m&Tk@ zGj|S72bzx_o6$`svu6_#d^JAyU-r{xE24#REGaoQs1-`iFld`a4g^`a=q?PmwN|!1 z^rk?(%p&v3a6&mi7bAZg`%Lub`@T1a>2gLssh&snEKWRXvV(;r#Y$%q6ryD~=CJZh z@KKO)%y0S1rvnx?c;nv-DPXfJ|By*wK@a9Rn#NRPYIrW8u97(C|J>+|pbyARoNm*L zWIHjX)c(r&7x~u?kw~A=*p_$4CF4_MO>7ppg@+&NzgT^OFv_UAa%ZD3o^J7S@4q_g zzBHgQw5eilqO5RkAtIo&qOO-u^6tAv5UwZJmL1P6A7nDj592CrT}#GB$7H<2Dv6_A zuhYU>%DPs+?d}`a6a#oc7aY^>sM&Q-lP zq5q~XK7BxNj2j{2#}S6GQ>C2N}^ z#OR25r9=nwl$n>s@Dn25{Ch{UNZPKHUiD&iVV2sqizJF`?Y2>D95g~+-lWxjWN?7>X;wtueQ`X_!P>R$2G{F_%1&T83k4DSptrSl&HxS zmy`XmeITp(wk=*cDThNRoD$G~kt$goURDFPlj2b9 zaZV^X@;u9RF~*M9<$GZ|=p-BX-M}qP%KQKqGony@5RH0huzr~`4`OF`Z~9Q5e#&n6f{$7-x$+Drn=xa!Yo?_t`%Hu=GbNj*LAKazyL^8cF8OCc{^`R zTaWD9sa$IJh{vhl$47q6K3m{X0724{m=`ulV+R-JO;t48Y}B^B?Mmp5c8F!BgfOo!J$(m+Ma)FhqFv)83rUliB~;BW z4dA*lAkU@R1Ph(<5CY^cednqr{`zpdL`6vC4IWRBV%r-D=?K-7KSU8|UDN_IEGFD5 z0N*4}4;&=2Qw4>Mzetgbk1vtft@r)?2XT1-)h~1ElFct-QL2j z*ea32rDY+x=-_`P{@*`=X?;+a(SJw-1uD6K7&m!h3J(~YwB@iYj1q2{%&kbsHCM>M za3)+Br*{d}0ivRj!bwmftRkuxnLQ;Fb49z6coR6H79<`z0*O2zMryIHm`#r#2|qtG zHz)MueZ2<^_yG&#tY+;_d3%xwkwud>__pWwLH(BAILnIT(*h77ft(R@9 z2w~lNLez=t4}qTbtUAkn+<@ziLB8r`OSZptt3pj+>3PX!RJ`tDV6A1u+-2z6y?yop zNHv24NHa$pcOSdZ>$p%@qr&vFjm6)UT=bV5KS09P1SZ;xWsa2Aq1Grvd*f{fAHq~+ z^`44)xH4@xkHXY7G1aEri5Ehhi`tjO9Yc6;UBOfP4Uiz0V+NS6^m z%BP)Mv^w?)yNOjkas!l>;p8_`5K_u3}3or3cRG}P0#i0b2c%u+UGjSfA#PYpkSAmq zXJBr^^B>^FldEtxdeg$^w)f0^{v+3Q{(A4<-w*7-?{}SH#+V8(F)?&W_MDN5C@zk7 z%BK`4Ow&hZMo)BFDvcbV=0jSzW(PyNM&DsU#p!Tth0R_YdIdvXO`=}P zXLADQAS2EZ7Szf#EkzxHokVt))h40ygxLsieJH^lmL0XS(4~o5sX3rp9@6o+-MRjq zqP_o}Cp~7wT`3CG)OKi1pUj*lyHMRV>nkvl3ky-v;tsc!+j{9daWh{rQ@5-sD6MIn z2sKBwL0xdc479IBsRyB9o5W>wY{fHo>7s~|d#Va%Jk7&$FZkRn^l7-{k-BjDH6*VS zuIF@a>h)q$_oqCq0bWrxW&hGgQtm}gjj&tfoU3-*b!h@v?wuY*$IEK8Y-b&s9vo-c zlJsnK(U7?8tnsM%+}mA>4D4_cN2QHJOpQHXPVY@ zFY7++8gud+3EEpmpAb?%8FZFzBf~KKzyw$#v{`E+GEOGA;7mwd^)5X=-cfjnPM9C8 z;}<^fPA~w(rtMpCR&(haTBq$>d|>EXeh>&yc9t8Df0q$)yFtzjT6ygU>qV18!fxKa zAYjDS&e^O>0GFbwH`{9+dfY-xpRCM*rsdS zWlHywaTFnvRqW>|@V)l<$s7D7oc9XxtB~Q#e!2(hP?mQyB#$5l;Xvm6nZwWejZs5%lxi}G^UgYA<&exCS*KP zf^Kk}OL2cKC+HsF*&xET*A9zq#y`KuIMGi9a1l(rJ)jxWIJk@#41MgT-j&0<&)8~=S7)Lj33jNvLXkjjwW{F{ zL>77c(H32P7GsZ>h`#>@1I~X_zE8r$Fp1=ro$ZS|8lqmk*YAV~o+oD~+)WCEQl}Lt zF%_n6UTtw=G$t}~VlJ+|p=9T`*n5Y*M(zU1+5{ydf<+7`-f*@swg+K5;S*2p;6I|z z=}o?jNH73JS4gj+V0~nH`08RdsC>6Yz0@VIvbDMDelbpLb9-NJD)avA=!yR4mSEpr zi+W<*p&~8HWFi@&d>2S%9q9NdV^o(Bzqc7>-%#U-z?SA;P<*U0C313}j`hi^)-Qk$ zR6=bI&f7aK9ZIv%+}A<8&>zMtiqnF-SW?(GCfhrb)C_M=%U4taL z#DCEL+ZUF4Gk0k=CrF2aq5n@nHs^8`g$WG;;*iXuzzj6S*FybSTf_8D=8kgRXbmx; zj-~&DC8GwALBC%WudV;2Rov{bwIz3?z3b|(9tn3r2fX=1fTesvVe8V2w15U2$Ak6# z`K8xJyZj2>%XMeHJHy4cm)-vFXa1WDG-s^;kUMIKC}&ia0Lo#6rk6xaCHw>+|EJBY z5p6Wuc?77EK&VGS4W)IeN}#fxa-+vuBiV>GF5*WK7e58Gd{9Lojy^nc_5;h0IZ$)< z!^=+`wUp>096dAp@go?&Z$dEqeHg9cM-$F8z8F?Na<8HClZ9Z2oxO*0kKcj`EP zpNrFnKmK;_Kj=&yPCRli#^X&L)eVOfqaCg5JOOml-_izjhMUtWyOvdMg-FagyGacu z$|Zk`kq=+=IBoq=Q^fj^OF&Fhi9xT++Erg{=e0_|7Bg%n+c`AK(}i@R zx}(zDgWl<`BP&S%3BY+=b-}Qf%kyZGeTVIz#T%fSP*1}t93Ori5llX)>Ps;24r+d z^isWH{Ss4ECdz4&eJx_lHv2?EdYOd9#CB2{_2wrUjaNrF z8mG-0=D>9I(j8U9Ig;3Q&>2;_kBWk%f0SJ>!U5op_Bd3(SDybx5VDkPq75LehJP=O zGK_q-?J3%y>9*|Hcvrya*I)@M2kLYsE51_5t?Ns$^f`$cx)s0YM(rIT_q-R2#Y;X& zVFHKpHENDDFoA=Hm@QsXX%~!qMi?$-)z}a(wna{$_3(#H!6EJ$1qHQTd^)VZOm+5N zEx!shXit;NPN>qQw@ZxcQnpK!as?ZI8A}4ThxgRC$HSxgQ1EHHeHT{V$DC0Cc}>`Q1HZJ zz@5IH=JEBXhTg5}Ew$zlU{W@Ke4QaXRP8>9H_?Ew^2F&|@L}PfwMD?uq<8!&nJIs- zucYTqILifVfEYq)S1F~WES>jkX{XcWWuQ3TB=jy>Wlp~1UHhAyXFAds`^k+1Q#rDv7jL83YsowmV~*UxbUh}|4>K@>l5zR zg5_qnjddjYNQwps;0Uw*2j@RIC6&4MQeQSq@wqTgl-%Tg6U^&B z!hUtZRCOz?uT-zjR*233Qy}E**-&;Dw8uG>$GMNH(u=YgIP}?4?ZKKfB*T^7K?~^+ z%cyc!Be6AsaT@euh=zrhX!mut=2$0LY134GmgGe$ zBbfQ-dK6F!!||~VIoUA?6wQe*jcjO)5yK=Pk|Tia4=Q$z&8+NHzFQG!sasFEWta09 z6H9$naxCOMB~|8^x#v)33vx!*2rBYB@jkuVNd4GrT4&|W_X`t?St85iKNN1 zGO;LQ5u^W=V)+n*t+0pnDd@K$wnt(J3A$vvf>qRNhK8K(d@1_%E0pajbL^E>b+w10 z$12YxR?^BlrIYCGFZFk`9+9ro=o3ommcP?;oXz=ctmQeAI8+b|10fY*e;-hjSK=}PYMD; z@?S0;D_Ncc6^OC!{ZH_QrFxabNJKiC2P;9ieZ(FfR}b3)UB)PM03M2eDXwI&I``$e zhSHeY0}XA<`H+HLz-g1p{b-5G0UwP#b0Xu}W%*e?dDmfiEpn?&0oZ#N{(3JiBlHF=lA{gD;?$182@qgLqX z`@8=ml_Yh^^Z1$p_lHUvCfa za(CqMVTb&<(_<)jm#EP_^u`+2?Th4w@Jb}GOi0M>L$S%@#qLw_Z{{Gb7&=q5*RoZr zH7zuaz#g}Oft;r+-dZO;Q+`W#NwAEP)hCcI<1ehMn|gc3?Kwy7Vw#FvH1%^Dtejk_ z8?d@`oo8fLcsoa$N}ge^r4Yxch0m8!T{TN!Em866NDOwcr*k80IE=ZYMKhm3(QIj~ z_!E@8&=Udq>cTBQZG~W0H_G_D^8&KqsU2Ttcz52d>(&0)$5+N-)?kg!S-u(JW6r_n2FOA_+foNGZ&V-yy$u;otNY{Ap4gUoOG`WG z>=`a16|)#q`X@YdTk8yOhgnaY+9c{=$hE9%OA<2jki-#J4EKYm1x@~h@w3FC9f2qk z%*$RoT*{%&_C*v%#ub_j|X)SfmB>7BPof z*9SD3&-S!?NS*c!DG{>a=Be@~eL}8-4BXWWwB0?L##@TuqBqN2V>px=+vQH-T!z3Y zrE+AT$ZY^e!Ny~337gK8^pk8x16bI%DF)6}gSqTqPm7q)=two@ z4-*ic#i#Q@(P!mdrPq_$gYDl`B1=;xb^-=4Xm0+m1w2Un)7$Zku73J*WI&Fp4r5(^ zl2CSt6TFKfNwiFKRbQJcMPXsKo%+eyrH;G>%As1aEU<#4Ic{9UzlYI??}PU^q0MgG zn^no9N!`?p6MmV;Jm5o)^p}6a#_lgN+DJluj>S#j#-z>d5*AvWosS5T z#2~*!H%TvIuafF925qGiw18Mfw=x!EFMbXxb0>!_E-WuK)r`cPYHEvSpx>uFnQ*Uf zm}gTj?Z^D4)MqR=URl5iXVHN?@zX~N@qUrnMSpi&TRJtz#pmqlRXIgs%H&#ByL97m zg324wDzCEnMB1$GCrI81s|XSsL*Akxu)N{cr?n1;%mkMX57@f0Qs6!>i>G(H{%*UO z7>188(rO;%6KOj1Obka&H&M04K^CNZY4mfCtd^B-X@0q(@`dTMb1G3;s4P^j#)Y+y zWT{jKK70CeXri0|ZDxw9b&j$oa)lo;u{t;HQ@45m*IU*0c(0e-wtk9D2QF+?Kq~Ts z@x1{cYv`@oFH|sI9mspuF2yRdg|q%d6Ms?oMX;SX)P?;=GkF&)GTVnYiTwt~0JqJ8 zf?U@H&L~aLE;|V{i(DX?#_#;$x4oof0v!2g38x)(8QIp8liDmG)Abn{F?Y0W3fxZ} zhgkgshuD(WU5%=#WtqfSa%>M5npS9l<#?6n?xum>URGcG1c?6ZovQR0LYtqoYAsm2 zbS7>)NJ^fm(bMpWqIxk)yTp&Wvl0lw&(G;lWaIUEyIb2dCKhb2eZoD=PEH#iwVw)q zcfukG<%Yj>9OX#Cq2*6bUbc#*;vIvSIuFJoG$RH_txja=Mr0d>ZN!ct!CLBD=8~jv zz(hGr{^XX*1YDriiy6AEm07144Za}Q_$yl7#9)NK+qcHL>Y14-zU|!b%pfjt%b&B* z%1$s6Gl8zhPZ|P~5rspZNW+GnDZEZDm;f3hP$t#%!;Ta7MPt#$6WLVbBzYp`EqWl6 zTK=9h75{L=o#zzYF?DzFR`nM`sPge^1e7)^jS(QN3LN4H=pQ0h{^;SJh5iuZX=SQv zrWK;Z^3i3k)3eGHdxCS)Fn-4(id4x%#rM}PH7qjJeAh`88rp#as-K*_o6-Vvgo2p+ zy~_slsM^U%p{8%NKfwho9mdNb!$-EHcJW&mD`vJFnjr__jRvy`Rn+y`8=xb%qm;_n zU$*vrAL)13>3Q7f>K zk-?e@@ja*mYWZ@r$fd55;ZfOB6qKrs-~#S$_60zPZ7++pgn(bEX@@A4=uupmL4<8T z%OQcLL?~v>me}Z?{t#$?TBY({Rxjs`l^qBefAPM1m;!^&|JPPW`=g5eM{AbQ{7di; z5OJS>_ln)~M((jjf}to>yAPbMrc2FQ4|>_0J3^H-@BL|QOZA|SfQpNX0#q8CmpkEK zZtcEs&K#%jEbK9sdI=9+7_)>mpn~o5xG*tWTzcgKxLmh~VGsK4papBXhE-)5aHpa2 z46@5oR{A9`cPDdxG=b{W*;FEEZ7GBel~!rKj^!F}uidO(?a8=8#5Y zGg=@2Ms5ksH4ImNVPJ^2)-ZeO+iJi3bc6Qp9=ihFW)F^5+ebrXxPLQ7)M|vkvEva! zZC2T;VPO>0ai<=5=5HI8H8ma}N8qre)AqGf+umsYnH_d+@%TVUyzaTP4>EJgvZfDH zFL6$78H|76oLE}x`9#B{#o(JZ?7ykgmP!0+_cR+b0C}#92 z5Z?RtuKXnI`=jHJv#S!E4Sk{W33KnCQc`+&J?FYXlUT-N8&q$q$?Q3^G`4{t@o5yO zfNf1(Hv6qmfAiq;`cCVIxr+^0Qa{*QJVpL0x1N?z#UK8uR{teBKL7Q;6zj+_$I?G2 z@=hY}3pbM=Zak+ZeEg_5b@R2;n z8&Q_sOu%m@VzPtSkr~Js@Oz%|T>q^&!VwA=YU!#Qd`DEK8U4|7`pSwv?&X)mYz$vm z!`)mP|87>te=;oY%Ai&kLU{_ugEHwGv$i3~C@kZ2+~8A~weJHqIA-bQl`}X=|D$ge z)!7o`E3>8s@ifjV+gWZoLnF*6?QPWQVxzkEoK@aJxUn4$^U&|;RzQ8ZiEo88D4%LT z>l%Lvb22i@x)lhx7;7J%V*d{W7jZEDVWgklHdg{JU#V+J{~ZuLbiwIDj-F2F4K^sr zFIBYsL36hhJ7EWEm=J`#B3fM=>xS*u2y5SpH(7~wor_oD1dmaHd{eai&}-&PcJxUr zfoz$clM|OS8GTcR&S8em(ihY%f1M*jEO;8>Hrhu`IaOy0N(dp<3PoZ(pg$)UytCIr z*P$-#M7llWe$r@nBJ%eL3n9`0ks9(L37PJvE-eYLfpkE}kM{E<(+`bjL?@Ts#QUpf z*8ysz*dI>(Eb4p83k&=6eL9S9vR>P)-JLCz%iOZQr1_-zucWh5ze5-v_B^tWKcwAT>FA3jl^!veo zIK=VkPxi%avK^oh(J@Sf_zAf+rbgxRxHR z?jSND`;sCZvv3_UIN=rHw(LVRx8Z!-@M^iiiF2ZIRP1KP0R*4kLyO~>Mn1T_xpUNo zHfF#TTp!3Tfv`=F)V^!8U3hN+gTUzS%onhxzK$KZj!zCB#4O|?`#LebUBA@x5uVLI zb`JhnzK3KSbiL0u1^u9q3eh(Y0Z~)<+5DI&{^v`vcZ0a$sH2uxSXQ0wa&E&|2x)60xAB*J_C8bd9~@KdVs5w<=$9Y5a(RywmM9=pfS+R zs(XP`RWqyV{UJ`ZV$6rZ3yv1Bw9k4vxq#;_Rr|n4&vVaafFAR7rn&>rIkXCXpKRo0 zPmF@8@4CBpx<5X2-@suyyl<~^YSgj2@MeDc(9;|=&vA(uV^}SL(E)j$c!}8jMn=f6 zlQKP;%*Xd6Y8X@ZHvU2>ie+-tc`sDv`lk~7pXJ1M5~Lgo(Vj$^r04#?BJ%$gRPPMP zM~?hgu}g*h|H{S+poBoZElm`Gp(e;Gv;jL72q!R%>`_HES^NTa*suniB%?ImlIR8| zN%6D_di3)&M(Z#9&&~8cPNwjBKZU(7rq31NqDP%s2-o8(@_zt`&vkC5*Yx{i-jNBk zCy3bm-C0YL$%3MX$yig8?$m61xF_bn#G$cFI5Z3HwD!U9w-1niKPloxI~66JnW7lg z7H!Sk&PZ(t`bFA_EB?JfEvxX)G8lj1eK?5o zm^=$;EX%ABUFQsE^V*7iF2zqqruqxw>e7233C7JY209V~wpurK`%0QziG1D5AHn7# zPle^V%@!R^4sxJFb=qu=4CpSsA>28#{pjloI7d~rBrje&!>qJY7usyhoHcK@+kJ&* z7Fo**GZslV>DerTap!-1T*4vMztkB-^Vt!z2{+lgvS!ERIYy;%oRn~8;_B+hWYzyV zg)8%sfzDDk5~3o{zD&>Ta?nKNQbJ*EE$S@Ab@4XYF)0DJ7Xw(lYf~M{!^=9){tQ!W zwR0>_$nKYJEXJtI&*D!0vfwfE5ykYbGGn~8Qgm0JzNCiM)9}f~EkVJ8Sg~$NII@_N zZQ?moFVH+7+YSjPsiX0NZijHwPv8ZWt&|)@T0--{wAx6%7Y~Yy0SiGE$v}I>^n;TV z!E&SaImZJ^Y*$GSk5;BCJq7@o>tInqpoSZqQpQI&JMq}eAQuLrQigI&m_#k z*cZaqTkYcx;UNtV=^*FtIUZbw&gR`&#L1=uY;VXYwi^{_=^{ z!>j`fmb>nMphZ__%cG2fbQ>wR>zpmBFXi7gVvnXIcx^VboQ(tv`TVNcV|@3fhcLts zY!U7|XHn9>o`G@b$1*%u>`BfmmoqH2d2Dlz*z%q!zlvp+XZL zU4nS21)0n)71Ohl^282{#Ped0Th!V}L;nrVjkg3(2t5uN!#zb=Je@U7|dUuVrA4>))@^pYI_YLCd3^OQh2 zuYz$1glF)CmviRje|b^fb@}5x%GwCQz`7#=-AIC69oe)T@%!LCkHhT`vqoYI1S@ZD)B92m{L3WX>ihEo#LNR%W2B zs2b6Bq0_a2ZI;WO%X%)YXQjbE-pwJ6dBlz#ObDt{Ai(>R^b{C5RCnv;~@()eRAR5VaGS9Jz}SxQ*+(NSIQ7~ zX&(ZtJzT+WlYawn1yKf}&3_UQB8EGtgOQ`>;$iN3Roo7LYjZFdvOT&RLcB$fB8Rfj zu_I4R=03hGG84rd`T+@I_DM5|v@?-YZn*7;gq>48HX8CC!Y^(&o z0>|%l5+6I61&Jk?`bcE^a7NSb%~@{fRQxavqYtm%B_a0I8+yu_ICz)VTg_V>t(?Zw z5`PGX$;F0y$%{?lOuoBYc62Q@rxo1F?4~CaYP1>}wq`Kx7=V_Jt4$KW2BY9We`Txo z3c|{@zaid9$0Ef(Yv!vrAv)sq@@LduQe?Hy^f>$pH&AXEX|1=y|1)>6Bxqm5q-M|A z#NM=9%08p06OHZ5PA3%+9_7(zl`hUx=P-5lqA!W>33FCHyRB#{I+zu(oOPbl&?2vS zw{2=o(Zt){=?ZKYQ)^-0Vs|sy!2M6MZciJg*hxkxD;i5CGQe_{6Ii!Np-qOkhnbJIP+* zX^AMd^R>r3%QV1QEXt-I{Su5!LjZ(6FpTXjwZ@PyZJU^9#$jF&<;pH+)mpY$Bj^)? zW-r<4waY5uCG0t*{RFiQDtgutT>0PBbmO*i@H6_x^O5QStQk$Jw)3 zp?2GfhXxMrD@tI|TG{&Z(%`QVPDJi#)M^pxy@@1!mLQuo2U-3qvtAZt5Gsh2%Ay2B zhLFx?k&q#R@>+!+M5!dxIW4kqvs~@A%X>+Xi22 z^a?gRDx=fbg1;+js!HxvVm7-fw0gAjak0E9OaqCS;UJe%8Dh$E#66?i8mp{$#ruLa z{`L1%tmmi0=~kcbm@nyhq-<41vG<9sibT>|?xm6zANsxvMps|oOS4$wtNB#oVYc{k zj!q99@mb6FoYaWQ@teA2vfXs_rGM-WiZe~);iacxjUlW5MG-;^6SAnxHJhs5h^tnQ zF#$$L)ozp>{=rc*F0L3FV8j#}RH~#uqHAKTEvSCSCDM9u*{(P|E2;}N(Qc;J_$vws zpozF_l@yf7a8G~Ha=E{X0#85Ua=F*zv4T0z2(8$nw_rm;SkgK41w(0`p@D8h8a(i% zm3KaTBYQ`FFOCwLT+eTe?j=`Slx{wp4FYzG-{X}<^&~LXDz4NOCC*A0hDB?7gu0g= zGQHDv`&(k7IS2q`e2({atMnkpiz$D0ZfnM#cddW#D?=BmJaF*~LQ9&LYur!3K83Zn z&ayI%u$5vFt-GpARAJ4Zr@eZ~wKlH$=9MxyGo)AY)97t2p%Uk=!29^cC(e$IzW_T* zl`^|48;r6#ss{RLV&(rufFiSLWQjel6iw{ROf*&?c5| z&&VVPfmXIEkd44t&&er?JeD}f)SD|ijc}e7^&D73zGbv)nl3b}4e|t3?j&cWF4faq zcD5K8YmQz8IBPueGGSaa`cbw+_4VfpA~Thab+MYP{jM$R!Z^1HH*& z4A*rQY{1)6ZNvwvPxxL}?E)mWye~fj`x&Skc0n*os3xtmNjUb|Xg3&pN$q>N(2sv# zo7FG(yVCeQX+C|IvE4p5L${vkjqYk7ojX71I{Cm~2gQ=FKM$%ocfXAoqkG|2PKKz4wcg(`U4bL;65tr~!*fH^YbFQ=c4RCj)vK{h_}cGg({+ z(PrjkO6)?uM8FcH_dyT3ykv$D-AC(){HN+W39?&M<$@rg1J zUo0mWJQV*z9YM2~T1b#45;4V(?IQfz+Po7}J2W7gH=1NmuDhvY`YPC6x{Xh<`}E=InBdGgT@K|JnHL1P@8-T2+zFgbVu zM&`tpCOWP-MTV6zP!h7SgX9tQL>Z}i#BEq z1rg!Gl2a@`0$|M-B~NDN4DzsXzcJVH*7IsWRl5AnSM82j{jzHV9$~F7ii%HjxD@od!DhQdL9Jfd zs7#-kHCAS?&(Wq-d==ofZnQ;8kK?p`@rNp}HBzmm9tta})Qvm)1p=xj9Q4wB6^Z#A zSJ$C&Dyn2-_R|+t&G4_nLO-aB!SFI(UTE$<{53Q`f(_6~08X(UP>h<|-VretU_yGJ z#}mEF0@mYQ5c_H{)<2C*$_sE!;?WZ;zFZU^q8e+h#0bTNKv&lor?0Z~GmUXVKeMPp z2R}kup_6OvUYZoL#*Jn7L@u4lY)uFH`FYzP^UtA8{npd+Uq!6khxZ(D)fjB`3L4+L zcvy!6asZ!N1y488p5P;^qGi$~<=7%yyEp5#v1QvBEH{O&@~W;@=u^4F( zj-aSlI23`-kg#KDM%Gp=SWe?cj{uwGh%KHrVxS^3wC~i=j??bI{q_Xk5mj5U-a?=j zb4h#JV{DNuoYD)%)VjjoB=*QgSVZ2nJ=I5xjc&}W+_DYBD~{2|1T}`;TIG{NdqM1M zIlOFvSh!lWPc1>n|BXCD@k*+j{zIOkI3OUj|Nl^#rHiqdojFr75DF&Qhzt+tg)xr# z1Fg8ZY@@*qTQZyi4!@Ex7Z}?(fTDv&l7LcR5oF(!gLQF#p}Bpda+qdPz7e@B-I&ZR zpm>Op!%h7sO5qxVTG7+zZuX*=@59p5op*;p)UXeE_NK@CyVv^;QAzOWz8GXJI+nKW zfDse_p0%?_pRr!~UKSG)O+OH*MZp=zAEm-P0k zkK#I*h1)GES_19Y7)9z)c=YSm-z81=tm;6%Q@wY9yn8qbfc2@5I`PU6eyi3FL$1&c zZ-ygMRw3`)jzFe;PasCFsu+#XC}AP(r#g8|&?kB|or;gIxIaSe1gZlEc`%7bO=*e7 z$JPA^@|7QC_zU;d-~?+;*z(jLaQ)We=Vh|yzaAhV4O8+BlOmKRhneIgl|CLYC(o+` z{1gV)OBp;TPw)e_8G-#5WYy2 zQ7SgQ3tD@tkDP#x<3YgTZl5kbq_^vDCfLo`3u7=0)l9_t!Rty6Iek>oNRe5 z&m9~ESBT6@*#;odwYKt(}NhZA!o^HxA9`7YVE<`uP&h>{OnJe zOHdLZHc-hI%ZVd#Rb|+U#-X0Y)o*_l%;UvUL9TgZMkWI9rA3M3a1WAU{r$G3 zLp?XQL@d{9rHhHMes5s+$d471lt5(*2#%o`H1CAy zEl*BkX=5U%jTQlJvEzCJPCGEo|MH7(x`a2M|2D{*F_y#Tc`dE6qUQ%s_u%dMth{D) zjq$)5n@L2iyp}LfId4Li(K;37Rm4q9F-Pkkg9kcsrn&i!SN>+PR}2&6&$$8*N_B58 zX7Qy4ujVx&h}AkSSU($cNvu|Ai+SwgXBRP;CN$b^82Sc6^ZF`{GkmK{8Xvx!%IkgP z%HU#abS+`B8Brv0N}jaD#rj`042JG}pf8EvEwkr2xt>=3bT z)$f@Q|BV45(tJAV)z(h5W3cCr8g}?`<1;^*Z3A6_E~>*%&e_k0Y|T5I3XMwbl6uK9 zrZJctqz^ySVT{7H(2p85)-uufxcLTh?Xj4m^hQI$jGiq*6Q)3HsF$301>Am8{B0bCb@2HckN|uG)nL5ziPF zRMEtYJo&ig=E7nNvg0azlQS4Xg$&a|nCxv-0qankbqd>T%Tnw4L{rI;r4hJBRapdU zlT-|Bge|U4ngjh49YI|NMhmOAEK+>Rjy6W+5tS8P_-=Lh?)=<+J? z&1L?<2nkDI+1)L!Y2}EOiD)&sHZpM~1GSy8L^r%X2R2SpN)^_ihQr&OYY*qoBiwbR zY2TVx9Hfq!$D%169!t%2owmSE<0CZWXs#(lU6xew#Np6XN2#DCQ$$6|Ds8nv0V8($ zSY6*eK*Zb|8`_nxTdmf^R}rP{qILurk38+Y+?{=*MBjWfd*SoZcuypOeS$<2`iqO& zv|f{C2Z>+FQX@bw&}2h%fi$A0X-qA2IhKFErz?!%?C`0ZZyFMjh~BmPj*&`P9!Uao zW(Hm<{KMPavL$cd-i@^o(45Y&((roeVzz=d<|UtAEK4>SGVA^XSG>-w#U}(*%`)T! zw@uE8PvJH+|1cB<>+m@6BWk& z(lJLg0+K+6IVw-QtF+G$aU)V7&NA*e9e=R%M93IjLbQO@4WAix0>@?OmGEwb!JUL> z-owsWjLWKf-kGZIgS?2~Y{dPC_q=A`PzW(OYGh`UIr~g*aWi=0*3+X6U&wGC*Umrw zov{qN7xiz^9yUUko4?E-B*nwq|Ca9YoIK}zc04jq5i6a?3U7_RK{Snl;BBDyq`&{` zT@>%j>V^ay1^{g9U4YEChC|SW5#~p|m?DE3=M#TiDx>n#?`#yD9 zAs~cO?|Pvy;gJ$1&f$kqu)cn1@LhP+jSbn+j&~Sv;Z({Shwz_E%1|MF!BYFgx;TJK z!bixJUG}Ku1&aYnG<{m&V2B!k+}vAEq(OLz5$+Rj38n=@v8YG_mNpbiu`me`y{w%i zsgXdv%J5UrZ;d9>sk5ot!l=z28Lhigu*n=|E;d+1Lw|;+%@Uc44x?bas=Oc+w2I#0 z1;=sRN)_A6mUbr@c!kI7!(d-qI((@T21PGL&N#|@Ez0(~Y_A1073gh7g(@s>fNeKn zbC7~J2(IN0p?kp5wZDtyBO=>X;q!}s~mK)5YEn7=4_3ZUfO6q?+>`h8agc;gVhH*$Fb^y=`C&eAXiZ`JC)v{ z+TrVNEbv9%pnI+HXl1U!>btL{X(;aL-`X?znB6@+I8>8=#Rko> zdwAAok8J?SS=Me&RJ4}=V0lM$1^2o7UN`sloC};y_*1qm3@%ODzcMxCPVUX#?Y!2T z&O?2o|D`QDrKAVdkS|G5>j<5Ree11PMWT1AqNK=JUO^-d*dinY-@qx6eN3?z2zceG@8-rW-iz zUh){9acbv<17pW!1?)fPuo&g^ zOjnl+U1H)=ep-=5iDpP1D11u$TFXcskf(5+gsx?5NIJOOmBxNH!hSZ%bP{caLa&hd zm_O2fc>VdVGj^*r&X>Gv1lV5hdby(+<~;!51RX-j&IH!@tck0McP+wA#}!86#DW*6 zu@Gp49I}9F`SeMilp5Bvk}?VIzzJi9G=(R2dnPtEge?wpK6NQ#kAh(S(@ z%G1ZW^z}B)%#~Emdc+!C$;4Z(HBX4Y^wj1qmutg=Ltn7Slgi8|Tb=0q$c@fgSX( z1FE_tu7$y_x8{ZVMOkn&3l->xD?_xcGornd?r9)7baeo{bAfT8MoKvygxN`B^i82T zn{UDZnAmQGvXE^!X^cWn!F(EjqbJUi4_=<^saz_>eyzHEm15{j5Z)JmYr)-Ppn5p{ z;s~|`e_Y~g0m%Vd9&D8$^)%}z16NZ^l7$3ez1)hrM%uqHl_jBYig&lLKTOR4cglCf9I7W~YI{VYJjK`*$|-nnvrprXr3mn8ynlNuHsB$%Y9T~s2g;yBDK_=088>TgU&W`9uJ3s2 zllr*W(z8{c7^GN`(P+NLJicnQK2Rr$pQ5JFdC4SUZ47=Cu*nkOL+auv?whopL@=*G zB~fAbh}Cz-*W{%_I_(>ceEP)~GeaGDklhb47^4CHHLg@vyG**vC3AkUMD!%;5En4Z z!|^tvq+=gVGg8$i=l(|UbP<(}pv=+N?Kjf|xKhLJ!jSORub{D0+xe2lG9I~b`{&OS z2uh?^@jkhtH-Yw}gkD%wUOaqYw9EdzkD;Ih{sL3_l@xJ8LUII&-8-hr!c5A>Nx`}B zYhX)<`_^6?Rfa@W-PbQqG(9ux&r4Lmq7eCh(`T}7MGpo8%*+DGhQFip@De6Yoi_T0 zr(B=mj?BjvSa=N`_X&2d3w1V`G*4rjXC=2=zd3m|EB5X3LIq%1Iu>!lYbNE%wbL^4 z^jfO)!5)y;MjA!VsucZ0xCG*CSPmT#Nf3(`b+`nofy8J0n0O;v75@3xtt-lEVCclz z5g@tK5X0p%hQNdM^8>KGNm>isS?9+wM%nHc2rGWGoMYM-lZ-40!MR-5Bt8PzvvGZ0 zDy4<;-H$^+Jy^poh@lM6M7OklaCFh?zxlMF#}~3u^TSa1^E;Ndn0%~;N<%i#G82_D~KcAPRS%NXX|FIr4H(Tl@1>hSM6m(_Hz za*|EdVkhsBG0s!r=ixS%Tu(lJM_{?SN5$-P@?KL&UNcLuM8MKIKQH*y2{W%qc1SXc z!I2~HTl+6mD^^uUb_2?I9J?p47mRTE#Qj5D6XiT&<=oQ+2*>^3s|}~94XuKYsO*hd zeu9Ds9g?UNoagM&QIU@lW=zgJE7(9JF7gFzFEvqczyL-+|#^n~fX_ zdH6dKbYe{9NQsdF0D0)ne`@Hie+uyb;^PEp27~b|h+mo4wD1U_3liXHF-GMBZTD$V zV```AqTCjFJ6TcmpE*?v&9g2K+gg~TsM)m@f48rrP|r2M*Nu#?w`Ck(S636(Dbvus zBD^A;-cDKmimfrsaS?HLxw7GvvF)|}J`S7#M(S|8QU#d?R3ZpYEOC&4bwL}9j_RMB z6#BAJk^0qBI}n&f{V_wgXidiam?^rXLEZ{|{p!3MxXj6iviO)AswNjxs1z#DNem6% z4AmnKZ?Rs&Bl-zplI*>HJa6q@&BMm93g+|Vkdbpwz{;3p%NvJ6clcGcBeqnvN>zn+ zwy;#37**7CwL@~GRrN!#2-2$NAp(-};CWWa)OmDR0Z5p3qaTM#EHo+KIMUp;pNkBI z{0KL~hV^ShS*mdharfHJdGK1RkVB$9Ls3gSTb9%H^e1xF%k?ALoR><#Oy{Ab_VvV!Wqj_k7S z9VeqDU9y<*9uEzHVXZCyb|V?&NXnVW&j{Mf3Yb0mLZHE>1Rm!;M~a zVUiUa8#*s$<(kdu&ZW!nmifai6ijK}aoWt?KbbEjjEbAC;b~68K8_hb7_~_3SNu+P zP)9IQnpZ${29$jdPJN$yTwlfAxq?EH-BlCA%p^01!*>TmyNrTCV9;CRW%%b!M*7llx0#%1 zxz|G{D!qZk-3ln>70gO<@@#Q=sEe!xGUHL3YG^@wpM=AE%UaWTC5t_zw%S?Ng#4;6p*|Mw4ndmgi&Vy>-wc;qqkBYF>q`H ziI~G$AoNWjed-ivI0`X`l|Urgr)_5?Y2hc~YJ3lSa+AepD3%2b>8O2we->Dx7m{DpIQyMT z;8Mh9jpVovTV^FfW}JEFABvbRaXBPa`6S|tJcb3d=&yN>h^n1~F&DiZTjiw|xc;pQr5$?-_ zZ2MWtg5rU(a=HGmZK~?km^7^QEJvpbyQIuU)Zgv zOyuHM?fdCL@C}uHarfi%Ytjz`i0bOnC|`=X)pQ@uPGi>)EEw?uDrcegEL;sZ*KoWivrSB{2=6spm$?d^1QEL8}*Ly-nW z+U#BmC86t5i)r#S*&3#AxHEl;PSQ6Pnle+U*&Y&Dr`3+q4a$!c0c1 z30)|RU#8KLQ5b3y?Jn~y4V-PbwJ)y(10EXj-xH)*Zy68L6?|7_-G1Nr$Y)J}Rg}x% z@$PrH{rONI+kSx;O|xUKe9mxk_tR?*UC+{=N`POkYM(QqrXH0pce)|GvE_FMjA{+BCyq8j@L=FZ8E#ycu4l?y=5za zo|=u?1;e`6i}od4nzyq<-fZEv3d?Ssuw3JP+$AF*1q8@Mt23}ws% zhf@qjvs4O^&3|tKI%9 z;0Q#IEC}vdG!UcdoNE3YS@nX^SU}cX_^G|H1aAgCfaBSQFsS0WTR`MAT|>})bpf#aYcLjut~wFQ$W1Zy+sP;^KgPJ?)>1e912Z*;oGCMppT zg+cC)LTOg|Dt%9Jm}am&8PWS=tQM;bIJ0s#N#@$UF-5KY!BV#y&C+|famsyMeX1pn zW+V3}F3#ui=9?f}W!`5c)ai$3J-EIyRO!f4Z;t%QqBl_T_|q*hPOGTx*0&EMwug!i z4#`HxkJ=Q(;Ms&%JSkk!Fq`7~ziv=VhUAC%#$k|s+$B@(R2FfaTIsblhTm!nm0~J) z2&8>n7WR?x8oriKvQR2mODKr@1 zOc)|q1-b;I3}FB<^QexFC^L=7s>{eKz8`+iIygMG@f<^0QRR?%M1`~R8E0iJH&-P$ zpSq(P5JQENo0E5w8KMFrCEbL-vyBo3Di*%4$6^F3mIMy+tD6GMr`%$XK#leFOp_)D z=?yiKVzUf%YrhpOMGDUcxCbAVF0N8dy;_pe=99kLByU)aq$ji0VV$!aC2@aW`(}dV z96$oJw#t3gFM=d30blRc1eWEsXI<}NTR8uH$Z)-F|X zq&G>+4mbCg%F^VRp6eVX|I0U_i%W!c>DE=LR)MRGnWs}TSLs7PTKxJAxY>y*Vjn4} z73KltO9)ZBS8y@|E-fnEtgn%z99!HS=j^2o^dGP!dVXv%w)pj*tU|m&^uI&S-Q>Kc z1mp{U=NeMrx_;-fhC1y0PXL4)cx$O5cQiCikskz@tPD1`%lejMRQEzNr76?FL` zHyEV~8y7uzC4Vm;UE6JNKmNR;V=(2u*AaX$LthOz_GrYdOx(s=z-1-ntli^a(P8DJ ze~e=lfOj<9fwcuBvYx2QG@W=INMD!uC|*6;R;52ALOsxz?el<93Uz$OW25mQ`(+cN zBAI^A8DVg_&I+kY9TT^XlTDW>R=V0HVFHiC2qkEWG4Ido69C6%cr?@gIh)F}d` zZd+RU<>(9jM;n1NAt645nGgeN>??^`H01u3pDW-}J)2rhk!owPBB5-OqqFy#UXp@w z)OoW+Sn*#jFM4B|{g+fCE3)TX zp0SrDm!tAEgIBI9H}zZdFpL1L>9#~T2)3htDw+|YnDW6Y-pD~@h%%Sa-yW%S>b7cr zUdje0=yvC*BceEchmuUR=uFaSd>&{?V*VqolUqdGPimb&L>s7wBHv=XkYr}1gJsx= zc&&iZk6ebpJfJEQoneXKNV@Ut#nW$+L651WoQw(_eG^aNnoqHHY`u;SmYd^6{J65x zXh(JDUu>pRm)Et6d%b7J=D_mIoU!uG_$AQ+mgXAnkJ{Ww+{7I?mc_fk)9_%RtNmb4 zg8h7jE?+!Gs8NFAfpf{gNA`*LG(ldUtcu8K(!<}r%T)-ob zQGs?0qf*dFOl*nT~W;FO~-?yT6}TJ@rB7~EYmzV;(R{vF5T=02GXLDdMPIG9?~i{j4+T)|0V@xfW{JA!Bm>HIgQM z@!^X~xitx|F_CS-v8J=uT5$QRpZA`1M1=8fnVo#o#Dq@p4PaF^6u)K%=B9JL@VQrIM!AdbgWo;*G9?^g`J$9OF_*Y-j&EdX zmdx)!B5%isPcLwIrOIMXW6++=CSq$I!|!=L>oQYP@|RtIt>QT){W772tfCUWsb?sQ zLr89&W63MjIT5q>;QrU0dvOEgtV4 z!5ofQ{9+0VsolpbRh$)OM(`TB>*k0!mu+t#t5vx{z234ja7dCl3ns& zvy1tOS&gY@f1Lno4oipk)=i*pm#acJOnuuO+IWS1PF(S*594!|0pL9~9jo%FRMDVA zKSVgcll^r$w*cyxIKXRTVZ@9l%qlxqX#+8}<-@7ePH;zPLek$JG_zChjk*B3-NXW%Fo`%>N*-XY6q|$VP9QhMc`VmET=~yt`B+R>D$7F*pILYqO za?PO&<)C=0jPjUXwuM1_IuBz(v?dwm>oOxN1uVhiJlPn3^mC$s9-CTJ<54Y_(Q3HN zr-^i3Wb?QKm*-Z)=U-SU#vh4!D5x@3$IcVh(m-g!fJH?x5>P%3w#;8 z2zTqkgu^h>-D|qIW0<-^Q8#-3?)|HGLvX)G^f&UjZ8huVpmhfk8kkfH!WBmciScCy zi{Xjzc(Z;qiLO7_?hT3OXvzCwLKQA&B2H&5K6M6nFV%eB&Mg5N(gysoHzE1l$oo{9 z_<)sE0qq{HM55RBXw&wn$jj613WrrV-a}yo1Z8fS&-A_`ZLvT#mqzPM`;SGwK7nTP zg3JOYZ{t`VpdZx>#iEnyZw|bik~Q?~2WLB|(yhAQ?-IpMpS)xw!W3oBSQFDduiiMH zJW|gb1#uk4^4PaPc-DeDzC*Y3Z^%^Gp{*vw9yWjRG`0B}oW)k=TgKX@KHU43i2{gBNiA|96I|VU>0GT>t6YXA8T>t! zb;Y!S%ipcJY^5T%=JvwKXCcj^-Qd%Z`?>d%4Kj&CzU;{2_=)llWn*$;l)Gl9$qI$C z0x5%cH4iyHIht81?ouhQKf2f=dky@Qm4PBlL?4Mv{vf4dh677z;UcVORN?Yy{tZ(F zwr~KQGHo{xXA^O?#&!~R$!Wa`GRvkDL|Ex1rxRKO_WQQ%-gwVO`A#`hpAz8sv#3^mRKDb-Z5~=nC9PTW_-X7|LYP@!^4G^;T@Wa#Pbr zgHMZstytV%qa@*(JDR_hy!JaN-}Ey4f@Y^DubJ_a{1=96hA)*_Wu7)PkkskC#eoC( zGS%mNqrwn;-x2Atj6l#LO+0;SFZoKTOk=1reJRaILB`R92nunjtX6*?)c5dhk1yY_4g`8{GGge9|*O2P_0w1Ud!~%(m134%FVYq#qr}On>WFV56>RrjG1t8 zZPOSm+47+`WRRsY#f$wGZ({Aef`fXRZqB7QMr6)pz#V6z9Zoo;BOKRYtI9N&lCPq! zsH<8A%6YDGLc`x;yK|pTZ3GeAttBg>@o1@VAvudDEQmJAXY)yL0)89b*g}4Of{bfd zo~Lvjepx92alU7%Hj=81HW@3?k8+LTBt$_xQIvXwg?tko|4`huibtk_^Rr(d^%KtD znfDmDCkfCLQHktZ#swHc$y;y~xvlFpA}W|>BtP|}a%=K2qOdB;dS+9A?U^={o1a%C z7lQ<&;M?X-EMN4v1QqepOI86X!sgKXcCo`r$^F#qERrZwAv>dPl&RgjM{7+V%935W zUF72%-^F=~+0oz~0YUsFaW1`X)t4Kj$MXe?15BOer@(>vrs!2oG&h=c0+pfN1dkVa zLOFYz>tOvZ15FN(Vn;IYX^qqfYvD`2^e#&l27b`*AL#7f9Z<)+Fx&DxY*tMi?^t9ykuQXb)6b(zZ5_` zvaV_0sN2PvSy#*$*H#WBpW*u$|9p`C*N2(rJ>hQ59pjla*)!F-_TB7!!kHg^>=KoP z_*TE@rY$eSE4^N3^n%UDi;pA}Pu&?myNo>$B-*DZG~c=I6+DbY?sE{SI~ZqG5?NL} z-^%d&DUN{2Q1o4>iz>h4pe*P0aU%d3o&%`#cxul1`T(q99pdN{k z!#%8OY5!2^O3Ali0<1iTu<-y#`~*vOBlI&yq=d9{=e=|16Nh7jpzmbbEpkWtHru}P z1hUR)eekmOA8CW$rQ|Sui_65`Hi~0)PMP%PJ;m7oB4&Iawu5LF?P-fwZ)$h3i7$Wd zpZa#fCF=BJ`Z25vgQT_Mw?f-XDrkFI1K)P|XLkI?JJokozDR`LD~7JKia^~PGo)jj zpvEyW6~?7G*=xWw(BwXk5bwIc@y=Z z@5G%zyU5N~8al-Mx;Rw}yxMkyntTZ9qKJ;*ysJl6lJ{%_oQ0DuQZ z^nK)8A}TS}U!;E{7y|%oFeGw}ThhP~(KP7h~^qcC(nidx)i z!0As0^UQA~{xewuZKU{N)G%_mRYNfb3&zphs}YJvdmw|o6x8BEK!Ae7_{wSy~YsR_c6daEJh(@$V*z~|Ng6Kij!VWwgKt>3Sao1#3ZhayD& nO6#Bg5Huaw<|d#SQq@gO@Jt>FS|M)S0~Y`b8vsCQxw-m3w$VVy diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5633f0c5e..949819d28 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Mon Sep 14 12:28:28 PDT 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip diff --git a/gradlew b/gradlew index 91a7e269e..cccdd3d51 100644 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,31 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -114,6 +113,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index aec99730b..e95643d6a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/src/main/java/com/someguyssoftware/treasure2/Treasure.java b/src/main/java/com/someguyssoftware/treasure2/Treasure.java index 2d84efaa6..40baa8789 100644 --- a/src/main/java/com/someguyssoftware/treasure2/Treasure.java +++ b/src/main/java/com/someguyssoftware/treasure2/Treasure.java @@ -91,7 +91,7 @@ * @author Mark Gottschling onDec 22, 2017 * */ -@Mod(modid = Treasure.MODID, name = Treasure.NAME, version = Treasure.VERSION, dependencies = "required-after:gottschcore@[1.13.0,)", acceptedMinecraftVersions = "[1.12.2]", updateJSON = Treasure.UPDATE_JSON_URL) +@Mod(modid = Treasure.MODID, name = Treasure.NAME, version = Treasure.VERSION, dependencies = "required-after:gottschcore@[1.14.0,)", acceptedMinecraftVersions = "[1.12.2]", updateJSON = Treasure.UPDATE_JSON_URL) @Credits(values = { "Treasure was first developed by Mark Gottschling on Aug 27, 2014.", "Treasure2 was first developed by Mark Gottschling on Jan 2018.", "Credits to Mason Gottschling for ideas and debugging.", diff --git a/src/main/java/com/someguyssoftware/treasure2/item/CharmedCoinItem.java b/src/main/java/com/someguyssoftware/treasure2/item/CharmedCoinItem.java index 43984fb3e..4c96db664 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/CharmedCoinItem.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/CharmedCoinItem.java @@ -66,6 +66,14 @@ public void addInformation(ItemStack stack, World worldIn, List tooltip, addCharmedInfo(stack, worldIn, tooltip, flagIn); } + /** + * + */ + @Override + public boolean hasEffect(ItemStack stack) { + return true; + } + /* * Example */ diff --git a/src/main/java/com/someguyssoftware/treasure2/item/CharmedGemItem.java b/src/main/java/com/someguyssoftware/treasure2/item/CharmedGemItem.java index 79cd967de..69dffcc30 100644 --- a/src/main/java/com/someguyssoftware/treasure2/item/CharmedGemItem.java +++ b/src/main/java/com/someguyssoftware/treasure2/item/CharmedGemItem.java @@ -48,4 +48,12 @@ public void addInformation(ItemStack stack, World worldIn, List tooltip, super.addInformation(stack, worldIn, tooltip, flagIn); addCharmedInfo(stack, worldIn, tooltip, flagIn); } + + /** + * + */ + @Override + public boolean hasEffect(ItemStack stack) { + return true; + } } diff --git a/src/main/resources/assets/treasure2/textures/items/coins/charmed_gold_coin.png b/src/main/resources/assets/treasure2/textures/items/coins/charmed_gold_coin.png index 5db2a05e479d3e354bfb3c41acbecedffa4b9f88..ebe8f9c4656d4d88f8ba4c95f20e6b1e3888cf66 100644 GIT binary patch delta 287 zcmV+)0pR|y1iAu{B!3BTNLh0L01m_e01m_fl`9S#0000WV@Og>004R?004l4008=A z004l}004G|008Xi0023j000&K#(vW}0002MNkly-g~MwF|66&VVt-&@U|{(9X$Mv(pFLcM z;u5$4FwM9$;xdHs|Ns9OHlICQhgBo81u#RH$O-w+Pa3hu0?c%nYmRL-L*Zld9@c2Y zrVv-yFfmXFm?-f-+yL9)_l(E3nlZ5Rc@U-f*8RVz(TJXqVE%;}`18{ateP*shNq9(irRv7yx|?vQ~UOa)tl^002ovPDHLkV1ge;e+2*l delta 514 zcmV+d0{#8E0@Qh?=Mg=xu!mdn;c+3kxk$##mTH2MNH~(Hha(8Ad=KF38SFzBAWp{@?XV09SfqxwGyWqwpoIapn1u!s& zvx~#`f2$$zW${z(=YWG-9aX?sw~O9-c9`VQp?gJqboK?9V%xJ|8eliDm>bidXe}M! z2Ai)}#YbjdqP;e_f|gK$2Dl-i@a5LpfTRN0oDe@T{R+H*2)%o&kwGDnue}&sc#3vs z7`u6nbv}D*2}uAc6HW=>f+TPWeU9L%eo6ole}1g4g}8x<0+7(H`#@rJZW-LzoVFL7}}i!5|R(>k0lF`pvr)wyYrwL3Nny0+PzCiizT%GqCgruy@H~E2iO{?6C{WF zXGH|?MnRpsS9Rqi@Jz~J0%$@!0nYxrPB3N~S{S))vfVyUJ~|PO=Fpf@eE|VU?0*qhci!Hh6<^7J^8Vz*XYhXVB{m$0Htg_p#OFSci8JV{j zLNh&G978NlFP(f^kVTQh<>)O9o^uf$tri_e7PDVU@b_7HIq&S6J4;?14=?&&k|h5m zCGGx?%&!-t7>%pfilzxqlulvlNiuF02%W2tEUs|G`XQgwySmeBRs~q7ad`Yo|FqV0 zPwN7AQzfIlfz<`Q8U^OF=kV#y|5DF5W2TGB)F8Re>i3_et~+y{D4^000SaNLh0L01m_e01m_fl`9S#00007bV*G` z2jm465E?7)k$VCF00Iw5L_t(I%cavhPn1Cv#_|8mnfJ0-T9}Y%sQCc&^t8lYDOM~n zF%|}b8c7xi30^|D1gTA+GFoa)=L#s^BiYp zT&BWBhxdAWO^*sF3e+M7C@{aj@BRzi@9VRXl@&0f)0|rsYYSpzwNhbrch?1gkmV2r zXW&C1WF^c;d^{qG;JrtK;6#u#W9!3vk}Ns>L`f5z7rr%{NRlvAsel=;Mn{pN;MVLc z0Ee|2J_&@pMCiJ53ivETyvGFrgP*MyrV&X~ECjp=hkuO*K21RlDW&)WQcQkNx%%eb#BU15JAKtX$q=rudm~?j3n;> z9$;i<+Pz*}H(VHeKRBRX{fMfvQ?2q~dD&fLY;J-o^-onsp1=5a xluv5u>4d38h=xT)HR3cfJUMx8ncQX9`8P)!4qlt8ma6~&002ovPDHLkV1n%+4P^iT diff --git a/update.json b/update.json index b6662fa99..d5126b503 100644 --- a/update.json +++ b/update.json @@ -1,8 +1,8 @@ { "homepage": "https://minecraft.curseforge.com/projects/treasure2", "promos": { - "1.12.2-latest": "1.13.2", - "1.12.2-recommended": "1.13.2" + "1.12.2-latest": "1.14.0", + "1.12.2-recommended": "1.14.0" }, "1.12.2": { "0.5.0": "alpha release", @@ -42,6 +42,7 @@ "1.12.1": "Fixed doubling of coins in Pouches bug (https://github.com/gottsch/gottsch-minecraft-Treasure/issues/142).\nAdded default values for MobProximitySpawners to prevent crashes (https://github.com/gottsch/gottsch-minecraft-Treasure/issues/152).\nAdded default charm assignments if loot table incorreclty configured (https://github.com/gottsch/gottsch-minecraft-Treasure/issues/146).", "1.13.0": "Added Ember Lock and Key.\nAdded Leaf Lock and Key.\nAdded Lightning Key.\nAdded ability to merge Keys on anvil.\nAdded Volcano Pit.\nAdded Blackstone Block (from mc1.16).\nIncreased Key success rate to 95%.\nIncreased Pilferer's Lock Pick success rate to 32%.\nIncreased Thief's Lock Pick success rate to 48%.\nUpdated loot tables to include Ember, Leaf and Lightning Keys.\nUpdated Chinese lang file.\n", "1.13.1": "Fixed the large number of TileEntities created because of Gravestones. (Note, this is only for newly generated chunks).\nReduced likihood of Bound Soul gravestone to 30%.\nFixed the versioning.\n", - "1.13.2": "Fixed duplication bug on Harvesting Charms.\nFixed some loot tables with item spelling errors.Tweaked the epic charmed loot table.\n" + "1.13.2": "Fixed duplication bug on Harvesting Charms.\nFixed some loot tables with item spelling errors.Tweaked the epic charmed loot table.", + "1.14.0": "Revamped Loot Table management system - uses vanilla with tweaks.\nAdded Cardboard Box, Milk Crate and Crystal Skull chests.\nAdded -facing, -chest, -locked and -sealed arguments to SpawnChestCommand.\nAdded Enchantment glow to Charmed Coins/Gems and updated images.\nUpdated to Forge 1.12.2-14.23.5.2854.\n" } } From 962aca43846e2382ceea39bb39206af349cfcb84 Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 14 Dec 2020 09:30:37 -0500 Subject: [PATCH 20/20] register loot tables with vanilla dungeon chests --- build.gradle | 4 ++ gradle.properties | 2 +- .../eventhandler/WorldEventHandler.java | 41 +++++++++++++++---- .../treasure2/pools/treasure/rare.json | 8 +--- .../treasure2/pools/treasure/uncommon.json | 22 ++++------ update.json | 2 +- 6 files changed, 47 insertions(+), 32 deletions(-) diff --git a/build.gradle b/build.gradle index 52046dd53..d316a3919 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,10 @@ buildscript { classpath 'net.minecraftforge.gradle:ForgeGradle:3.+' } } +plugins { + // must use gradle v3.0+ for this version of shadow (2.0.1). Update gradle-wrapper.properties + id "com.github.johnrengelman.shadow" version "4.0.4" +} apply plugin: 'net.minecraftforge.gradle' //Only edit below this line, the above code adds and enables the nessasary things for Forge to be setup. diff --git a/gradle.properties b/gradle.properties index 4d9f05dbc..4f0f700de 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,7 +15,7 @@ mc_version=1.12.2 forge_version=14.23.5.2854 mappings_version=20171003-1.12 gottschcore_version=1.14.0 -gottschcore_forge_version=14.23.5.2768 +gottschcore_forge_version=14.23.5.2854 patchouli_version=1.0-20.108 # paths diff --git a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java index 0833aaba4..85d0c837d 100644 --- a/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java +++ b/src/main/java/com/someguyssoftware/treasure2/eventhandler/WorldEventHandler.java @@ -3,6 +3,8 @@ */ package com.someguyssoftware.treasure2.eventhandler; +import static com.someguyssoftware.treasure2.Treasure.logger; + import java.util.Map.Entry; import com.someguyssoftware.gottschcore.mod.IMod; @@ -14,7 +16,16 @@ import com.someguyssoftware.treasure2.registry.ChestRegistry; import com.someguyssoftware.treasure2.worldgen.ITreasureWorldGenerator; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootEntry; +import net.minecraft.world.storage.loot.LootEntryTable; +import net.minecraft.world.storage.loot.LootPool; +import net.minecraft.world.storage.loot.LootTable; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraft.world.storage.loot.RandomValueRange; +import net.minecraft.world.storage.loot.conditions.LootCondition; +import net.minecraftforge.event.LootTableLoadEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -27,7 +38,7 @@ public class WorldEventHandler { // reference to the mod. private IMod mod; - + /** * */ @@ -38,44 +49,56 @@ public WorldEventHandler(IMod mod) { @SubscribeEvent(priority = EventPriority.HIGH) public void onWorldLoad(WorldEvent.Load event) { Treasure.logger.debug("In world load event for dimension {}", event.getWorld().provider.getDimension()); - + /* * On load of dimension 0 (overworld), initialize the loot table's context and other static loot tables */ if (WorldInfo.isServerSide(event.getWorld()) && event.getWorld().provider.getDimension() == 0) { -// Treasure.logger.debug("server event"); + // Treasure.logger.debug("server event"); WorldServer world = (WorldServer) event.getWorld(); // called once to initiate world-level properties in the LootTableMaster Treasure.LOOT_TABLE_MASTER.init(world); - + // register mod's loot tables TreasureLootTableRegistry.register(mod.getId()); - + // register files with their respective managers Treasure.META_MANAGER.register(getMod().getId()); Treasure.TEMPLATE_MANAGER.register(getMod().getId()); Treasure.DECAY_MANAGER.register(getMod().getId()); - + /* * clear the current World Gens values and reload */ for (Entry worldGenEntry : Treasure.WORLD_GENERATORS.entrySet()) { worldGenEntry.getValue().init(); } - + /* * un-load the chest registry */ Treasure.logger.debug("Chest registry size BEFORE cleaning -> {}", ChestRegistry.getInstance().getValues().size()); ChestRegistry.getInstance().clear(); Treasure.logger.debug("Chest registry size AFTER cleaning -> {}", ChestRegistry.getInstance().getValues().size()); - + GenDataPersistence.get(world); Treasure.logger.debug("Chest registry size after world event load -> {}", ChestRegistry.getInstance().getValues().size()); } } - + + @SubscribeEvent + public void lootLoad(LootTableLoadEvent event) { + if (event.getName().toString().equals(LootTableList.CHESTS_SIMPLE_DUNGEON.toString()/*"minecraft:chests/simple_dungeon"*/)) { + + // load a loot table + ResourceLocation location = new ResourceLocation(Treasure.MODID, "pools/treasure/scarce"); + LootEntry entry = new LootEntryTable(location, 1, 1, new LootCondition[] {}, "treasure"); + LootPool pool = new LootPool(new LootEntry[] {entry}, new LootCondition[] {}, new RandomValueRange(1), new RandomValueRange(1), "treasure"); + event.getTable().addPool(pool); + } + } + /** * @return the mod */ diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/rare.json b/src/main/resources/loot_tables/treasure2/pools/treasure/rare.json index 907850337..f78c59722 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/rare.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/rare.json @@ -10,7 +10,7 @@ "type": "item", "name": "treasure2:lightning_key", "weight": 10 - }, + }, { "entryName": "metallurgists_key", "type": "item", @@ -168,12 +168,6 @@ ] } ] - }, - { - "name": "rare_charms", - "rolls": 1, - "entries": [ - ] } ] } diff --git a/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon.json b/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon.json index f195c8087..8448db990 100644 --- a/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon.json +++ b/src/main/resources/loot_tables/treasure2/pools/treasure/uncommon.json @@ -18,7 +18,7 @@ "max": 2 } } - ] + ] }, { "entryName": "stone_key", @@ -33,7 +33,7 @@ "max": 2 } } - ] + ] }, { "entryName": "pilferers_lock_pick", @@ -63,7 +63,7 @@ "max": 2 } } - ] + ] }, { "entryName": "thiefs_lock_pick", @@ -78,7 +78,7 @@ "max": 2 } } - ] + ] }, { "entryName": "ember_key", @@ -91,7 +91,7 @@ "type": "item", "name": "treasure2:leaf_key", "weight": 15 - }, + }, { "entryName": "gold_key", "type": "item", @@ -103,7 +103,7 @@ "type": "item", "name": "treasure2:spider_key", "weight": 10 - } + } ] }, { @@ -141,12 +141,6 @@ ] } ] - }, - { - "name": "uncommon_charms", - "rolls": 1, - "entries": [ - ] - } + } ] -} \ No newline at end of file +} diff --git a/update.json b/update.json index d5126b503..2786ff3fc 100644 --- a/update.json +++ b/update.json @@ -43,6 +43,6 @@ "1.13.0": "Added Ember Lock and Key.\nAdded Leaf Lock and Key.\nAdded Lightning Key.\nAdded ability to merge Keys on anvil.\nAdded Volcano Pit.\nAdded Blackstone Block (from mc1.16).\nIncreased Key success rate to 95%.\nIncreased Pilferer's Lock Pick success rate to 32%.\nIncreased Thief's Lock Pick success rate to 48%.\nUpdated loot tables to include Ember, Leaf and Lightning Keys.\nUpdated Chinese lang file.\n", "1.13.1": "Fixed the large number of TileEntities created because of Gravestones. (Note, this is only for newly generated chunks).\nReduced likihood of Bound Soul gravestone to 30%.\nFixed the versioning.\n", "1.13.2": "Fixed duplication bug on Harvesting Charms.\nFixed some loot tables with item spelling errors.Tweaked the epic charmed loot table.", - "1.14.0": "Revamped Loot Table management system - uses vanilla with tweaks.\nAdded Cardboard Box, Milk Crate and Crystal Skull chests.\nAdded -facing, -chest, -locked and -sealed arguments to SpawnChestCommand.\nAdded Enchantment glow to Charmed Coins/Gems and updated images.\nUpdated to Forge 1.12.2-14.23.5.2854.\n" + "1.14.0": "Revamped Loot Table management system - uses vanilla with tweaks.\nAdded Cardboard Box, Milk Crate and Crystal Skull chests.\nRegistered treasure loot tables with vanilla dungeon chests.\nAdded -facing, -chest, -locked and -sealed arguments to SpawnChestCommand.\nAdded Enchantment glow to Charmed Coins/Gems and updated images.\nUpdated to Forge 1.12.2-14.23.5.2854.\n" } }