From 4fe1a2d3dbd56160260c9840cd4b517df9340cce Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Wed, 10 Jan 2018 07:52:04 -0500 Subject: [PATCH] MOAR --- src/main/java/org/phantomapi/sfx/Aud.java | 39 + src/main/java/org/phantomapi/sfx/Audible.java | 89 + .../org/phantomapi/sfx/AudibleEntity.java | 117 ++ src/main/java/org/phantomapi/sfx/Audio.java | 142 ++ .../org/phantomapi/sfx/AudioDistortion.java | 11 + .../org/phantomapi/sfx/BasicSequencer.java | 221 +++ .../phantomapi/sfx/DopplerAudibleEntity.java | 32 + .../java/org/phantomapi/sfx/Instrument.java | 123 ++ .../org/phantomapi/sfx/MFADistortion.java | 39 + .../java/org/phantomapi/sfx/Sequencer.java | 48 + .../java/org/phantomapi/sfx/package-info.java | 5 + src/main/java/phantom/lang/ByteMap2D.java | 127 ++ src/main/java/phantom/lang/GSound.java | 291 ++++ src/main/java/phantom/lang/GTime.java | 318 ++++ src/main/java/phantom/lang/Heaft.java | 6 + src/main/java/phantom/lang/Priority.java | 11 + src/main/java/phantom/texture/anvil_base.png | Bin 0 -> 379 bytes .../phantom/texture/anvil_top_damaged_0.png | Bin 0 -> 310 bytes .../phantom/texture/anvil_top_damaged_1.png | Bin 0 -> 367 bytes .../phantom/texture/anvil_top_damaged_2.png | Bin 0 -> 406 bytes src/main/java/phantom/texture/beacon.png | Bin 0 -> 208 bytes .../java/phantom/texture/bed_feet_end.png | Bin 0 -> 470 bytes .../java/phantom/texture/bed_feet_side.png | Bin 0 -> 438 bytes .../java/phantom/texture/bed_feet_top.png | Bin 0 -> 813 bytes .../java/phantom/texture/bed_head_end.png | Bin 0 -> 476 bytes .../java/phantom/texture/bed_head_side.png | Bin 0 -> 462 bytes .../java/phantom/texture/bed_head_top.png | Bin 0 -> 958 bytes src/main/java/phantom/texture/bedrock.png | Bin 0 -> 225 bytes src/main/java/phantom/texture/bookshelf.png | Bin 0 -> 375 bytes .../java/phantom/texture/brewing_stand.png | Bin 0 -> 321 bytes .../phantom/texture/brewing_stand_base.png | Bin 0 -> 513 bytes src/main/java/phantom/texture/brick.png | Bin 0 -> 506 bytes .../java/phantom/texture/cactus_bottom.png | Bin 0 -> 273 bytes src/main/java/phantom/texture/cactus_side.png | Bin 0 -> 430 bytes src/main/java/phantom/texture/cactus_top.png | Bin 0 -> 321 bytes src/main/java/phantom/texture/cake_bottom.png | Bin 0 -> 144 bytes src/main/java/phantom/texture/cake_inner.png | Bin 0 -> 165 bytes src/main/java/phantom/texture/cake_side.png | Bin 0 -> 154 bytes src/main/java/phantom/texture/cake_top.png | Bin 0 -> 199 bytes .../java/phantom/texture/carrots_stage_0.png | Bin 0 -> 108 bytes .../java/phantom/texture/carrots_stage_1.png | Bin 0 -> 128 bytes .../java/phantom/texture/carrots_stage_2.png | Bin 0 -> 187 bytes .../java/phantom/texture/carrots_stage_3.png | Bin 0 -> 306 bytes .../java/phantom/texture/cauldron_bottom.png | Bin 0 -> 242 bytes .../java/phantom/texture/cauldron_inner.png | Bin 0 -> 364 bytes .../java/phantom/texture/cauldron_side.png | Bin 0 -> 534 bytes .../java/phantom/texture/cauldron_top.png | Bin 0 -> 414 bytes src/main/java/phantom/texture/clay.png | Bin 0 -> 584 bytes src/main/java/phantom/texture/coal_block.png | Bin 0 -> 368 bytes src/main/java/phantom/texture/coal_ore.png | Bin 0 -> 257 bytes src/main/java/phantom/texture/coarse_dirt.png | Bin 0 -> 674 bytes src/main/java/phantom/texture/cobblestone.png | Bin 0 -> 568 bytes .../phantom/texture/cobblestone_mossy.png | Bin 0 -> 632 bytes .../java/phantom/texture/cocoa_stage_0.png | Bin 0 -> 248 bytes .../java/phantom/texture/cocoa_stage_1.png | Bin 0 -> 405 bytes .../java/phantom/texture/cocoa_stage_2.png | Bin 0 -> 570 bytes .../java/phantom/texture/command_block.png | Bin 0 -> 349 bytes .../java/phantom/texture/comparator_off.png | Bin 0 -> 675 bytes .../java/phantom/texture/comparator_on.png | Bin 0 -> 696 bytes .../phantom/texture/crafting_table_front.png | Bin 0 -> 407 bytes .../phantom/texture/crafting_table_side.png | Bin 0 -> 386 bytes .../phantom/texture/crafting_table_top.png | Bin 0 -> 550 bytes .../daylight_detector_inverted_top.png | Bin 0 -> 287 bytes .../texture/daylight_detector_side.png | Bin 0 -> 206 bytes .../phantom/texture/daylight_detector_top.png | Bin 0 -> 335 bytes src/main/java/phantom/texture/deadbush.png | Bin 0 -> 168 bytes .../java/phantom/texture/destroy_stage_0.png | Bin 0 -> 102 bytes .../java/phantom/texture/destroy_stage_1.png | Bin 0 -> 115 bytes .../java/phantom/texture/destroy_stage_2.png | Bin 0 -> 123 bytes .../java/phantom/texture/destroy_stage_3.png | Bin 0 -> 145 bytes .../java/phantom/texture/destroy_stage_4.png | Bin 0 -> 155 bytes .../java/phantom/texture/destroy_stage_5.png | Bin 0 -> 169 bytes .../java/phantom/texture/destroy_stage_6.png | Bin 0 -> 179 bytes .../java/phantom/texture/destroy_stage_7.png | Bin 0 -> 190 bytes .../java/phantom/texture/destroy_stage_8.png | Bin 0 -> 211 bytes .../java/phantom/texture/destroy_stage_9.png | Bin 0 -> 218 bytes .../java/phantom/texture/diamond_block.png | Bin 0 -> 469 bytes src/main/java/phantom/texture/diamond_ore.png | Bin 0 -> 262 bytes src/main/java/phantom/texture/dirt.png | Bin 0 -> 266 bytes .../java/phantom/texture/dirt_podzol_side.png | Bin 0 -> 740 bytes .../java/phantom/texture/dirt_podzol_top.png | Bin 0 -> 823 bytes .../texture/dispenser_front_horizontal.png | Bin 0 -> 495 bytes .../texture/dispenser_front_vertical.png | Bin 0 -> 749 bytes .../phantom/texture/door_acacia_lower.png | Bin 0 -> 660 bytes .../phantom/texture/door_acacia_upper.png | Bin 0 -> 629 bytes .../java/phantom/texture/door_birch_lower.png | Bin 0 -> 666 bytes .../java/phantom/texture/door_birch_upper.png | Bin 0 -> 707 bytes .../phantom/texture/door_dark_oak_lower.png | Bin 0 -> 639 bytes .../phantom/texture/door_dark_oak_upper.png | Bin 0 -> 626 bytes .../java/phantom/texture/door_iron_lower.png | Bin 0 -> 551 bytes .../java/phantom/texture/door_iron_upper.png | Bin 0 -> 449 bytes .../phantom/texture/door_jungle_lower.png | Bin 0 -> 472 bytes .../phantom/texture/door_jungle_upper.png | Bin 0 -> 465 bytes .../phantom/texture/door_spruce_lower.png | Bin 0 -> 417 bytes .../phantom/texture/door_spruce_upper.png | Bin 0 -> 398 bytes .../java/phantom/texture/door_wood_lower.png | Bin 0 -> 399 bytes .../java/phantom/texture/door_wood_upper.png | Bin 0 -> 401 bytes .../texture/double_plant_fern_bottom.png | Bin 0 -> 706 bytes .../phantom/texture/double_plant_fern_top.png | Bin 0 -> 670 bytes .../texture/double_plant_grass_bottom.png | Bin 0 -> 715 bytes .../texture/double_plant_grass_top.png | Bin 0 -> 717 bytes .../texture/double_plant_paeonia_bottom.png | Bin 0 -> 665 bytes .../texture/double_plant_paeonia_top.png | Bin 0 -> 727 bytes .../texture/double_plant_rose_bottom.png | Bin 0 -> 698 bytes .../phantom/texture/double_plant_rose_top.png | Bin 0 -> 637 bytes .../texture/double_plant_sunflower_back.png | Bin 0 -> 427 bytes .../texture/double_plant_sunflower_bottom.png | Bin 0 -> 592 bytes .../texture/double_plant_sunflower_front.png | Bin 0 -> 466 bytes .../texture/double_plant_sunflower_top.png | Bin 0 -> 576 bytes .../texture/double_plant_syringa_bottom.png | Bin 0 -> 695 bytes .../texture/double_plant_syringa_top.png | Bin 0 -> 671 bytes src/main/java/phantom/texture/dragon_egg.png | Bin 0 -> 193 bytes .../texture/dropper_front_horizontal.png | Bin 0 -> 713 bytes .../texture/dropper_front_vertical.png | Bin 0 -> 712 bytes .../java/phantom/texture/emerald_block.png | Bin 0 -> 658 bytes src/main/java/phantom/texture/emerald_ore.png | Bin 0 -> 364 bytes .../texture/enchanting_table_bottom.png | Bin 0 -> 438 bytes .../phantom/texture/enchanting_table_side.png | Bin 0 -> 359 bytes .../phantom/texture/enchanting_table_top.png | Bin 0 -> 221 bytes src/main/java/phantom/texture/end_stone.png | Bin 0 -> 404 bytes .../java/phantom/texture/endframe_eye.png | Bin 0 -> 201 bytes .../java/phantom/texture/endframe_side.png | Bin 0 -> 424 bytes .../java/phantom/texture/endframe_top.png | Bin 0 -> 492 bytes .../java/phantom/texture/farmland_dry.png | Bin 0 -> 258 bytes .../java/phantom/texture/farmland_wet.png | Bin 0 -> 610 bytes src/main/java/phantom/texture/fern.png | Bin 0 -> 157 bytes .../java/phantom/texture/fire_layer_0.png | Bin 0 -> 16576 bytes .../java/phantom/texture/fire_layer_1.png | Bin 0 -> 16723 bytes .../java/phantom/texture/flower_allium.png | Bin 0 -> 482 bytes .../phantom/texture/flower_blue_orchid.png | Bin 0 -> 545 bytes .../java/phantom/texture/flower_dandelion.png | Bin 0 -> 145 bytes .../java/phantom/texture/flower_houstonia.png | Bin 0 -> 530 bytes .../phantom/texture/flower_oxeye_daisy.png | Bin 0 -> 556 bytes .../java/phantom/texture/flower_paeonia.png | Bin 0 -> 503 bytes src/main/java/phantom/texture/flower_pot.png | Bin 0 -> 229 bytes src/main/java/phantom/texture/flower_rose.png | Bin 0 -> 355 bytes .../phantom/texture/flower_tulip_orange.png | Bin 0 -> 548 bytes .../phantom/texture/flower_tulip_pink.png | Bin 0 -> 555 bytes .../java/phantom/texture/flower_tulip_red.png | Bin 0 -> 556 bytes .../phantom/texture/flower_tulip_white.png | Bin 0 -> 545 bytes src/main/java/phantom/texture/foliage.png | Bin 0 -> 17661 bytes .../phantom/texture/furnace_front_off.png | Bin 0 -> 615 bytes .../java/phantom/texture/furnace_front_on.png | Bin 0 -> 661 bytes .../java/phantom/texture/furnace_side.png | Bin 0 -> 564 bytes src/main/java/phantom/texture/furnace_top.png | Bin 0 -> 550 bytes src/main/java/phantom/texture/glass.png | Bin 0 -> 184 bytes src/main/java/phantom/texture/glass_black.png | Bin 0 -> 203 bytes src/main/java/phantom/texture/glass_blue.png | Bin 0 -> 206 bytes src/main/java/phantom/texture/glass_brown.png | Bin 0 -> 205 bytes src/main/java/phantom/texture/glass_cyan.png | Bin 0 -> 205 bytes src/main/java/phantom/texture/glass_gray.png | Bin 0 -> 203 bytes src/main/java/phantom/texture/glass_green.png | Bin 0 -> 204 bytes .../java/phantom/texture/glass_light_blue.png | Bin 0 -> 204 bytes src/main/java/phantom/texture/glass_lime.png | Bin 0 -> 206 bytes .../java/phantom/texture/glass_magenta.png | Bin 0 -> 206 bytes .../java/phantom/texture/glass_orange.png | Bin 0 -> 206 bytes .../java/phantom/texture/glass_pane_top.png | Bin 0 -> 117 bytes .../phantom/texture/glass_pane_top_black.png | Bin 0 -> 114 bytes .../phantom/texture/glass_pane_top_blue.png | Bin 0 -> 120 bytes .../phantom/texture/glass_pane_top_brown.png | Bin 0 -> 119 bytes .../phantom/texture/glass_pane_top_cyan.png | Bin 0 -> 119 bytes .../phantom/texture/glass_pane_top_gray.png | Bin 0 -> 119 bytes .../phantom/texture/glass_pane_top_green.png | Bin 0 -> 119 bytes .../texture/glass_pane_top_light_blue.png | Bin 0 -> 120 bytes .../phantom/texture/glass_pane_top_lime.png | Bin 0 -> 119 bytes .../texture/glass_pane_top_magenta.png | Bin 0 -> 120 bytes .../phantom/texture/glass_pane_top_orange.png | Bin 0 -> 120 bytes .../phantom/texture/glass_pane_top_pink.png | Bin 0 -> 120 bytes .../phantom/texture/glass_pane_top_purple.png | Bin 0 -> 120 bytes .../phantom/texture/glass_pane_top_red.png | Bin 0 -> 119 bytes .../phantom/texture/glass_pane_top_silver.png | Bin 0 -> 120 bytes .../phantom/texture/glass_pane_top_white.png | Bin 0 -> 2842 bytes .../phantom/texture/glass_pane_top_yellow.png | Bin 0 -> 120 bytes src/main/java/phantom/texture/glass_pink.png | Bin 0 -> 206 bytes .../java/phantom/texture/glass_purple.png | Bin 0 -> 206 bytes src/main/java/phantom/texture/glass_red.png | Bin 0 -> 204 bytes .../java/phantom/texture/glass_silver.png | Bin 0 -> 202 bytes src/main/java/phantom/texture/glass_white.png | Bin 0 -> 322 bytes .../java/phantom/texture/glass_yellow.png | Bin 0 -> 205 bytes src/main/java/phantom/texture/glowstone.png | Bin 0 -> 283 bytes src/main/java/phantom/texture/gold_block.png | Bin 0 -> 740 bytes src/main/java/phantom/texture/gold_ore.png | Bin 0 -> 263 bytes src/main/java/phantom/texture/grass_side.png | Bin 0 -> 408 bytes .../phantom/texture/grass_side_overlay.png | Bin 0 -> 219 bytes .../phantom/texture/grass_side_snowed.png | Bin 0 -> 268 bytes src/main/java/phantom/texture/grass_top.png | Bin 0 -> 560 bytes src/main/java/phantom/texture/gravel.png | Bin 0 -> 470 bytes .../java/phantom/texture/hardened_clay.png | Bin 0 -> 3273 bytes .../texture/hardened_clay_stained_black.png | Bin 0 -> 3060 bytes .../texture/hardened_clay_stained_blue.png | Bin 0 -> 3099 bytes .../texture/hardened_clay_stained_brown.png | Bin 0 -> 3098 bytes .../texture/hardened_clay_stained_cyan.png | Bin 0 -> 3147 bytes .../texture/hardened_clay_stained_gray.png | Bin 0 -> 3063 bytes .../texture/hardened_clay_stained_green.png | Bin 0 -> 3107 bytes .../hardened_clay_stained_light_blue.png | Bin 0 -> 3114 bytes .../texture/hardened_clay_stained_lime.png | Bin 0 -> 3166 bytes .../texture/hardened_clay_stained_magenta.png | Bin 0 -> 3169 bytes .../texture/hardened_clay_stained_orange.png | Bin 0 -> 3164 bytes .../texture/hardened_clay_stained_pink.png | Bin 0 -> 3173 bytes .../texture/hardened_clay_stained_purple.png | Bin 0 -> 3177 bytes .../texture/hardened_clay_stained_red.png | Bin 0 -> 3164 bytes .../texture/hardened_clay_stained_silver.png | Bin 0 -> 3125 bytes .../texture/hardened_clay_stained_white.png | Bin 0 -> 3148 bytes .../texture/hardened_clay_stained_yellow.png | Bin 0 -> 3168 bytes .../java/phantom/texture/hay_block_side.png | Bin 0 -> 795 bytes .../java/phantom/texture/hay_block_top.png | Bin 0 -> 892 bytes .../java/phantom/texture/hopper_inside.png | Bin 0 -> 422 bytes .../java/phantom/texture/hopper_outside.png | Bin 0 -> 531 bytes src/main/java/phantom/texture/hopper_top.png | Bin 0 -> 406 bytes src/main/java/phantom/texture/ice.png | Bin 0 -> 150 bytes src/main/java/phantom/texture/ice_packed.png | Bin 0 -> 527 bytes src/main/java/phantom/texture/iron_bars.png | Bin 0 -> 491 bytes src/main/java/phantom/texture/iron_block.png | Bin 0 -> 333 bytes src/main/java/phantom/texture/iron_ore.png | Bin 0 -> 265 bytes .../java/phantom/texture/iron_trapdoor.png | Bin 0 -> 382 bytes .../phantom/texture/itemframe_background.png | Bin 0 -> 410 bytes .../java/phantom/texture/jukebox_side.png | Bin 0 -> 395 bytes src/main/java/phantom/texture/jukebox_top.png | Bin 0 -> 356 bytes src/main/java/phantom/texture/ladder.png | Bin 0 -> 280 bytes src/main/java/phantom/texture/lapis_block.png | Bin 0 -> 754 bytes src/main/java/phantom/texture/lapis_ore.png | Bin 0 -> 447 bytes src/main/java/phantom/texture/lava_flow.png | Bin 0 -> 9931 bytes src/main/java/phantom/texture/lava_still.png | Bin 0 -> 10420 bytes .../java/phantom/texture/leaves_acacia.png | Bin 0 -> 598 bytes .../java/phantom/texture/leaves_big_oak.png | Bin 0 -> 499 bytes .../java/phantom/texture/leaves_birch.png | Bin 0 -> 499 bytes .../java/phantom/texture/leaves_jungle.png | Bin 0 -> 341 bytes src/main/java/phantom/texture/leaves_oak.png | Bin 0 -> 499 bytes .../java/phantom/texture/leaves_spruce.png | Bin 0 -> 263 bytes src/main/java/phantom/texture/lever.png | Bin 0 -> 136 bytes src/main/java/phantom/texture/log_acacia.png | Bin 0 -> 797 bytes .../java/phantom/texture/log_acacia_top.png | Bin 0 -> 621 bytes src/main/java/phantom/texture/log_big_oak.png | Bin 0 -> 683 bytes .../java/phantom/texture/log_big_oak_top.png | Bin 0 -> 580 bytes src/main/java/phantom/texture/log_birch.png | Bin 0 -> 742 bytes .../java/phantom/texture/log_birch_top.png | Bin 0 -> 779 bytes src/main/java/phantom/texture/log_jungle.png | Bin 0 -> 609 bytes .../java/phantom/texture/log_jungle_top.png | Bin 0 -> 683 bytes src/main/java/phantom/texture/log_oak.png | Bin 0 -> 528 bytes src/main/java/phantom/texture/log_oak_top.png | Bin 0 -> 478 bytes src/main/java/phantom/texture/log_spruce.png | Bin 0 -> 451 bytes .../java/phantom/texture/log_spruce_top.png | Bin 0 -> 609 bytes src/main/java/phantom/texture/melon_side.png | Bin 0 -> 449 bytes .../phantom/texture/melon_stem_connected.png | Bin 0 -> 165 bytes .../texture/melon_stem_disconnected.png | Bin 0 -> 189 bytes src/main/java/phantom/texture/melon_top.png | Bin 0 -> 326 bytes src/main/java/phantom/texture/mob_spawner.png | Bin 0 -> 338 bytes .../phantom/texture/mushroom_block_inside.png | Bin 0 -> 315 bytes .../texture/mushroom_block_skin_brown.png | Bin 0 -> 546 bytes .../texture/mushroom_block_skin_red.png | Bin 0 -> 428 bytes .../texture/mushroom_block_skin_stem.png | Bin 0 -> 400 bytes .../java/phantom/texture/mushroom_brown.png | Bin 0 -> 120 bytes .../java/phantom/texture/mushroom_red.png | Bin 0 -> 143 bytes .../java/phantom/texture/mycelium_side.png | Bin 0 -> 441 bytes .../java/phantom/texture/mycelium_top.png | Bin 0 -> 496 bytes .../java/phantom/texture/nether_brick.png | Bin 0 -> 328 bytes .../phantom/texture/nether_wart_stage_0.png | Bin 0 -> 152 bytes .../phantom/texture/nether_wart_stage_1.png | Bin 0 -> 271 bytes .../phantom/texture/nether_wart_stage_2.png | Bin 0 -> 480 bytes src/main/java/phantom/texture/netherrack.png | Bin 0 -> 727 bytes src/main/java/phantom/texture/noteblock.png | Bin 0 -> 395 bytes src/main/java/phantom/texture/obsidian.png | Bin 0 -> 489 bytes .../java/phantom/texture/package-info.java | 4 + .../java/phantom/texture/piston_bottom.png | Bin 0 -> 550 bytes .../java/phantom/texture/piston_inner.png | Bin 0 -> 509 bytes src/main/java/phantom/texture/piston_side.png | Bin 0 -> 604 bytes .../phantom/texture/piston_top_normal.png | Bin 0 -> 388 bytes .../phantom/texture/piston_top_sticky.png | Bin 0 -> 622 bytes .../java/phantom/texture/planks_acacia.png | Bin 0 -> 452 bytes .../java/phantom/texture/planks_big_oak.png | Bin 0 -> 438 bytes .../java/phantom/texture/planks_birch.png | Bin 0 -> 265 bytes .../java/phantom/texture/planks_jungle.png | Bin 0 -> 263 bytes src/main/java/phantom/texture/planks_oak.png | Bin 0 -> 247 bytes .../java/phantom/texture/planks_spruce.png | Bin 0 -> 254 bytes src/main/java/phantom/texture/portal.png | Bin 0 -> 14166 bytes .../java/phantom/texture/potatoes_stage_0.png | Bin 0 -> 108 bytes .../java/phantom/texture/potatoes_stage_1.png | Bin 0 -> 128 bytes .../java/phantom/texture/potatoes_stage_2.png | Bin 0 -> 187 bytes .../java/phantom/texture/potatoes_stage_3.png | Bin 0 -> 236 bytes .../phantom/texture/prismarine_bricks.png | Bin 0 -> 936 bytes .../java/phantom/texture/prismarine_dark.png | Bin 0 -> 867 bytes .../java/phantom/texture/prismarine_rough.png | Bin 0 -> 3378 bytes .../java/phantom/texture/pumpkin_face_off.png | Bin 0 -> 240 bytes .../java/phantom/texture/pumpkin_face_on.png | Bin 0 -> 422 bytes .../java/phantom/texture/pumpkin_side.png | Bin 0 -> 219 bytes .../texture/pumpkin_stem_connected.png | Bin 0 -> 165 bytes .../texture/pumpkin_stem_disconnected.png | Bin 0 -> 189 bytes src/main/java/phantom/texture/pumpkin_top.png | Bin 0 -> 272 bytes .../phantom/texture/quartz_block_bottom.png | Bin 0 -> 484 bytes .../phantom/texture/quartz_block_chiseled.png | Bin 0 -> 560 bytes .../texture/quartz_block_chiseled_top.png | Bin 0 -> 535 bytes .../phantom/texture/quartz_block_lines.png | Bin 0 -> 341 bytes .../texture/quartz_block_lines_top.png | Bin 0 -> 503 bytes .../phantom/texture/quartz_block_side.png | Bin 0 -> 419 bytes .../java/phantom/texture/quartz_block_top.png | Bin 0 -> 419 bytes src/main/java/phantom/texture/quartz_ore.png | Bin 0 -> 1018 bytes .../java/phantom/texture/rail_activator.png | Bin 0 -> 496 bytes .../texture/rail_activator_powered.png | Bin 0 -> 542 bytes .../java/phantom/texture/rail_detector.png | Bin 0 -> 309 bytes .../phantom/texture/rail_detector_powered.png | Bin 0 -> 581 bytes src/main/java/phantom/texture/rail_golden.png | Bin 0 -> 290 bytes .../phantom/texture/rail_golden_powered.png | Bin 0 -> 341 bytes src/main/java/phantom/texture/rail_normal.png | Bin 0 -> 232 bytes .../phantom/texture/rail_normal_turned.png | Bin 0 -> 247 bytes src/main/java/phantom/texture/red_sand.png | Bin 0 -> 3455 bytes .../phantom/texture/red_sandstone_bottom.png | Bin 0 -> 728 bytes .../phantom/texture/red_sandstone_carved.png | Bin 0 -> 655 bytes .../phantom/texture/red_sandstone_normal.png | Bin 0 -> 716 bytes .../phantom/texture/red_sandstone_smooth.png | Bin 0 -> 580 bytes .../phantom/texture/red_sandstone_top.png | Bin 0 -> 577 bytes .../java/phantom/texture/redstone_block.png | Bin 0 -> 609 bytes .../phantom/texture/redstone_dust_cross.png | Bin 0 -> 162 bytes .../texture/redstone_dust_cross_overlay.png | Bin 0 -> 75 bytes .../phantom/texture/redstone_dust_line.png | Bin 0 -> 117 bytes .../texture/redstone_dust_line_overlay.png | Bin 0 -> 164 bytes .../phantom/texture/redstone_lamp_off.png | Bin 0 -> 616 bytes .../java/phantom/texture/redstone_lamp_on.png | Bin 0 -> 682 bytes .../java/phantom/texture/redstone_ore.png | Bin 0 -> 264 bytes .../phantom/texture/redstone_torch_off.png | Bin 0 -> 155 bytes .../phantom/texture/redstone_torch_on.png | Bin 0 -> 160 bytes src/main/java/phantom/texture/reeds.png | Bin 0 -> 186 bytes .../java/phantom/texture/repeater_off.png | Bin 0 -> 375 bytes src/main/java/phantom/texture/repeater_on.png | Bin 0 -> 371 bytes src/main/java/phantom/texture/sand.png | Bin 0 -> 721 bytes .../java/phantom/texture/sandstone_bottom.png | Bin 0 -> 638 bytes .../java/phantom/texture/sandstone_carved.png | Bin 0 -> 596 bytes .../java/phantom/texture/sandstone_normal.png | Bin 0 -> 777 bytes .../java/phantom/texture/sandstone_smooth.png | Bin 0 -> 544 bytes .../java/phantom/texture/sandstone_top.png | Bin 0 -> 735 bytes .../java/phantom/texture/sapling_acacia.png | Bin 0 -> 554 bytes .../java/phantom/texture/sapling_birch.png | Bin 0 -> 225 bytes .../java/phantom/texture/sapling_jungle.png | Bin 0 -> 239 bytes src/main/java/phantom/texture/sapling_oak.png | Bin 0 -> 278 bytes .../phantom/texture/sapling_roofed_oak.png | Bin 0 -> 579 bytes .../java/phantom/texture/sapling_spruce.png | Bin 0 -> 211 bytes src/main/java/phantom/texture/sea_lantern.png | Bin 0 -> 3033 bytes src/main/java/phantom/texture/slime.png | Bin 0 -> 787 bytes src/main/java/phantom/texture/snow.png | Bin 0 -> 207 bytes src/main/java/phantom/texture/soul_sand.png | Bin 0 -> 633 bytes src/main/java/phantom/texture/sponge.png | Bin 0 -> 953 bytes src/main/java/phantom/texture/sponge_wet.png | Bin 0 -> 947 bytes src/main/java/phantom/texture/stone.png | Bin 0 -> 223 bytes .../java/phantom/texture/stone_andesite.png | Bin 0 -> 1024 bytes .../phantom/texture/stone_andesite_smooth.png | Bin 0 -> 850 bytes .../java/phantom/texture/stone_diorite.png | Bin 0 -> 984 bytes .../phantom/texture/stone_diorite_smooth.png | Bin 0 -> 887 bytes .../java/phantom/texture/stone_granite.png | Bin 0 -> 979 bytes .../phantom/texture/stone_granite_smooth.png | Bin 0 -> 804 bytes .../java/phantom/texture/stone_slab_side.png | Bin 0 -> 271 bytes .../java/phantom/texture/stone_slab_top.png | Bin 0 -> 252 bytes src/main/java/phantom/texture/stonebrick.png | Bin 0 -> 402 bytes .../phantom/texture/stonebrick_carved.png | Bin 0 -> 413 bytes .../phantom/texture/stonebrick_cracked.png | Bin 0 -> 469 bytes .../java/phantom/texture/stonebrick_mossy.png | Bin 0 -> 545 bytes src/main/java/phantom/texture/tallgrass.png | Bin 0 -> 584 bytes src/main/java/phantom/texture/tnt_bottom.png | Bin 0 -> 112 bytes src/main/java/phantom/texture/tnt_side.png | Bin 0 -> 212 bytes src/main/java/phantom/texture/tnt_top.png | Bin 0 -> 237 bytes src/main/java/phantom/texture/torch_on.png | Bin 0 -> 159 bytes src/main/java/phantom/texture/trapdoor.png | Bin 0 -> 442 bytes src/main/java/phantom/texture/trip_wire.png | Bin 0 -> 281 bytes .../java/phantom/texture/trip_wire_source.png | Bin 0 -> 233 bytes src/main/java/phantom/texture/vine.png | Bin 0 -> 235 bytes src/main/java/phantom/texture/water_flow.png | Bin 0 -> 10198 bytes src/main/java/phantom/texture/water_still.png | Bin 0 -> 14567 bytes src/main/java/phantom/texture/waterlily.png | Bin 0 -> 185 bytes src/main/java/phantom/texture/web.png | Bin 0 -> 213 bytes .../java/phantom/texture/wheat_stage_0.png | Bin 0 -> 100 bytes .../java/phantom/texture/wheat_stage_1.png | Bin 0 -> 155 bytes .../java/phantom/texture/wheat_stage_2.png | Bin 0 -> 257 bytes .../java/phantom/texture/wheat_stage_3.png | Bin 0 -> 379 bytes .../java/phantom/texture/wheat_stage_4.png | Bin 0 -> 454 bytes .../java/phantom/texture/wheat_stage_5.png | Bin 0 -> 534 bytes .../java/phantom/texture/wheat_stage_6.png | Bin 0 -> 562 bytes .../java/phantom/texture/wheat_stage_7.png | Bin 0 -> 621 bytes .../phantom/texture/wool_colored_black.png | Bin 0 -> 382 bytes .../phantom/texture/wool_colored_blue.png | Bin 0 -> 482 bytes .../phantom/texture/wool_colored_brown.png | Bin 0 -> 410 bytes .../phantom/texture/wool_colored_cyan.png | Bin 0 -> 480 bytes .../phantom/texture/wool_colored_gray.png | Bin 0 -> 360 bytes .../phantom/texture/wool_colored_green.png | Bin 0 -> 403 bytes .../texture/wool_colored_light_blue.png | Bin 0 -> 509 bytes .../phantom/texture/wool_colored_lime.png | Bin 0 -> 491 bytes .../phantom/texture/wool_colored_magenta.png | Bin 0 -> 495 bytes .../phantom/texture/wool_colored_orange.png | Bin 0 -> 461 bytes .../phantom/texture/wool_colored_pink.png | Bin 0 -> 513 bytes .../phantom/texture/wool_colored_purple.png | Bin 0 -> 501 bytes .../java/phantom/texture/wool_colored_red.png | Bin 0 -> 464 bytes .../phantom/texture/wool_colored_silver.png | Bin 0 -> 489 bytes .../phantom/texture/wool_colored_white.png | Bin 0 -> 508 bytes .../phantom/texture/wool_colored_yellow.png | Bin 0 -> 480 bytes src/main/java/phantom/util/data/Alphabet.java | 206 +++ src/main/java/phantom/util/files/IO.java | 1466 +++++++++++++++++ src/main/java/phantom/world/Chunks.java | 207 +++ src/main/java/phantom/world/Worlds.java | 48 + 395 files changed, 3550 insertions(+) create mode 100644 src/main/java/org/phantomapi/sfx/Aud.java create mode 100644 src/main/java/org/phantomapi/sfx/Audible.java create mode 100644 src/main/java/org/phantomapi/sfx/AudibleEntity.java create mode 100644 src/main/java/org/phantomapi/sfx/Audio.java create mode 100644 src/main/java/org/phantomapi/sfx/AudioDistortion.java create mode 100644 src/main/java/org/phantomapi/sfx/BasicSequencer.java create mode 100644 src/main/java/org/phantomapi/sfx/DopplerAudibleEntity.java create mode 100644 src/main/java/org/phantomapi/sfx/Instrument.java create mode 100644 src/main/java/org/phantomapi/sfx/MFADistortion.java create mode 100644 src/main/java/org/phantomapi/sfx/Sequencer.java create mode 100644 src/main/java/org/phantomapi/sfx/package-info.java create mode 100644 src/main/java/phantom/lang/ByteMap2D.java create mode 100644 src/main/java/phantom/lang/GSound.java create mode 100644 src/main/java/phantom/lang/GTime.java create mode 100644 src/main/java/phantom/lang/Heaft.java create mode 100644 src/main/java/phantom/lang/Priority.java create mode 100644 src/main/java/phantom/texture/anvil_base.png create mode 100644 src/main/java/phantom/texture/anvil_top_damaged_0.png create mode 100644 src/main/java/phantom/texture/anvil_top_damaged_1.png create mode 100644 src/main/java/phantom/texture/anvil_top_damaged_2.png create mode 100644 src/main/java/phantom/texture/beacon.png create mode 100644 src/main/java/phantom/texture/bed_feet_end.png create mode 100644 src/main/java/phantom/texture/bed_feet_side.png create mode 100644 src/main/java/phantom/texture/bed_feet_top.png create mode 100644 src/main/java/phantom/texture/bed_head_end.png create mode 100644 src/main/java/phantom/texture/bed_head_side.png create mode 100644 src/main/java/phantom/texture/bed_head_top.png create mode 100644 src/main/java/phantom/texture/bedrock.png create mode 100644 src/main/java/phantom/texture/bookshelf.png create mode 100644 src/main/java/phantom/texture/brewing_stand.png create mode 100644 src/main/java/phantom/texture/brewing_stand_base.png create mode 100644 src/main/java/phantom/texture/brick.png create mode 100644 src/main/java/phantom/texture/cactus_bottom.png create mode 100644 src/main/java/phantom/texture/cactus_side.png create mode 100644 src/main/java/phantom/texture/cactus_top.png create mode 100644 src/main/java/phantom/texture/cake_bottom.png create mode 100644 src/main/java/phantom/texture/cake_inner.png create mode 100644 src/main/java/phantom/texture/cake_side.png create mode 100644 src/main/java/phantom/texture/cake_top.png create mode 100644 src/main/java/phantom/texture/carrots_stage_0.png create mode 100644 src/main/java/phantom/texture/carrots_stage_1.png create mode 100644 src/main/java/phantom/texture/carrots_stage_2.png create mode 100644 src/main/java/phantom/texture/carrots_stage_3.png create mode 100644 src/main/java/phantom/texture/cauldron_bottom.png create mode 100644 src/main/java/phantom/texture/cauldron_inner.png create mode 100644 src/main/java/phantom/texture/cauldron_side.png create mode 100644 src/main/java/phantom/texture/cauldron_top.png create mode 100644 src/main/java/phantom/texture/clay.png create mode 100644 src/main/java/phantom/texture/coal_block.png create mode 100644 src/main/java/phantom/texture/coal_ore.png create mode 100644 src/main/java/phantom/texture/coarse_dirt.png create mode 100644 src/main/java/phantom/texture/cobblestone.png create mode 100644 src/main/java/phantom/texture/cobblestone_mossy.png create mode 100644 src/main/java/phantom/texture/cocoa_stage_0.png create mode 100644 src/main/java/phantom/texture/cocoa_stage_1.png create mode 100644 src/main/java/phantom/texture/cocoa_stage_2.png create mode 100644 src/main/java/phantom/texture/command_block.png create mode 100644 src/main/java/phantom/texture/comparator_off.png create mode 100644 src/main/java/phantom/texture/comparator_on.png create mode 100644 src/main/java/phantom/texture/crafting_table_front.png create mode 100644 src/main/java/phantom/texture/crafting_table_side.png create mode 100644 src/main/java/phantom/texture/crafting_table_top.png create mode 100644 src/main/java/phantom/texture/daylight_detector_inverted_top.png create mode 100644 src/main/java/phantom/texture/daylight_detector_side.png create mode 100644 src/main/java/phantom/texture/daylight_detector_top.png create mode 100644 src/main/java/phantom/texture/deadbush.png create mode 100644 src/main/java/phantom/texture/destroy_stage_0.png create mode 100644 src/main/java/phantom/texture/destroy_stage_1.png create mode 100644 src/main/java/phantom/texture/destroy_stage_2.png create mode 100644 src/main/java/phantom/texture/destroy_stage_3.png create mode 100644 src/main/java/phantom/texture/destroy_stage_4.png create mode 100644 src/main/java/phantom/texture/destroy_stage_5.png create mode 100644 src/main/java/phantom/texture/destroy_stage_6.png create mode 100644 src/main/java/phantom/texture/destroy_stage_7.png create mode 100644 src/main/java/phantom/texture/destroy_stage_8.png create mode 100644 src/main/java/phantom/texture/destroy_stage_9.png create mode 100644 src/main/java/phantom/texture/diamond_block.png create mode 100644 src/main/java/phantom/texture/diamond_ore.png create mode 100644 src/main/java/phantom/texture/dirt.png create mode 100644 src/main/java/phantom/texture/dirt_podzol_side.png create mode 100644 src/main/java/phantom/texture/dirt_podzol_top.png create mode 100644 src/main/java/phantom/texture/dispenser_front_horizontal.png create mode 100644 src/main/java/phantom/texture/dispenser_front_vertical.png create mode 100644 src/main/java/phantom/texture/door_acacia_lower.png create mode 100644 src/main/java/phantom/texture/door_acacia_upper.png create mode 100644 src/main/java/phantom/texture/door_birch_lower.png create mode 100644 src/main/java/phantom/texture/door_birch_upper.png create mode 100644 src/main/java/phantom/texture/door_dark_oak_lower.png create mode 100644 src/main/java/phantom/texture/door_dark_oak_upper.png create mode 100644 src/main/java/phantom/texture/door_iron_lower.png create mode 100644 src/main/java/phantom/texture/door_iron_upper.png create mode 100644 src/main/java/phantom/texture/door_jungle_lower.png create mode 100644 src/main/java/phantom/texture/door_jungle_upper.png create mode 100644 src/main/java/phantom/texture/door_spruce_lower.png create mode 100644 src/main/java/phantom/texture/door_spruce_upper.png create mode 100644 src/main/java/phantom/texture/door_wood_lower.png create mode 100644 src/main/java/phantom/texture/door_wood_upper.png create mode 100644 src/main/java/phantom/texture/double_plant_fern_bottom.png create mode 100644 src/main/java/phantom/texture/double_plant_fern_top.png create mode 100644 src/main/java/phantom/texture/double_plant_grass_bottom.png create mode 100644 src/main/java/phantom/texture/double_plant_grass_top.png create mode 100644 src/main/java/phantom/texture/double_plant_paeonia_bottom.png create mode 100644 src/main/java/phantom/texture/double_plant_paeonia_top.png create mode 100644 src/main/java/phantom/texture/double_plant_rose_bottom.png create mode 100644 src/main/java/phantom/texture/double_plant_rose_top.png create mode 100644 src/main/java/phantom/texture/double_plant_sunflower_back.png create mode 100644 src/main/java/phantom/texture/double_plant_sunflower_bottom.png create mode 100644 src/main/java/phantom/texture/double_plant_sunflower_front.png create mode 100644 src/main/java/phantom/texture/double_plant_sunflower_top.png create mode 100644 src/main/java/phantom/texture/double_plant_syringa_bottom.png create mode 100644 src/main/java/phantom/texture/double_plant_syringa_top.png create mode 100644 src/main/java/phantom/texture/dragon_egg.png create mode 100644 src/main/java/phantom/texture/dropper_front_horizontal.png create mode 100644 src/main/java/phantom/texture/dropper_front_vertical.png create mode 100644 src/main/java/phantom/texture/emerald_block.png create mode 100644 src/main/java/phantom/texture/emerald_ore.png create mode 100644 src/main/java/phantom/texture/enchanting_table_bottom.png create mode 100644 src/main/java/phantom/texture/enchanting_table_side.png create mode 100644 src/main/java/phantom/texture/enchanting_table_top.png create mode 100644 src/main/java/phantom/texture/end_stone.png create mode 100644 src/main/java/phantom/texture/endframe_eye.png create mode 100644 src/main/java/phantom/texture/endframe_side.png create mode 100644 src/main/java/phantom/texture/endframe_top.png create mode 100644 src/main/java/phantom/texture/farmland_dry.png create mode 100644 src/main/java/phantom/texture/farmland_wet.png create mode 100644 src/main/java/phantom/texture/fern.png create mode 100644 src/main/java/phantom/texture/fire_layer_0.png create mode 100644 src/main/java/phantom/texture/fire_layer_1.png create mode 100644 src/main/java/phantom/texture/flower_allium.png create mode 100644 src/main/java/phantom/texture/flower_blue_orchid.png create mode 100644 src/main/java/phantom/texture/flower_dandelion.png create mode 100644 src/main/java/phantom/texture/flower_houstonia.png create mode 100644 src/main/java/phantom/texture/flower_oxeye_daisy.png create mode 100644 src/main/java/phantom/texture/flower_paeonia.png create mode 100644 src/main/java/phantom/texture/flower_pot.png create mode 100644 src/main/java/phantom/texture/flower_rose.png create mode 100644 src/main/java/phantom/texture/flower_tulip_orange.png create mode 100644 src/main/java/phantom/texture/flower_tulip_pink.png create mode 100644 src/main/java/phantom/texture/flower_tulip_red.png create mode 100644 src/main/java/phantom/texture/flower_tulip_white.png create mode 100644 src/main/java/phantom/texture/foliage.png create mode 100644 src/main/java/phantom/texture/furnace_front_off.png create mode 100644 src/main/java/phantom/texture/furnace_front_on.png create mode 100644 src/main/java/phantom/texture/furnace_side.png create mode 100644 src/main/java/phantom/texture/furnace_top.png create mode 100644 src/main/java/phantom/texture/glass.png create mode 100644 src/main/java/phantom/texture/glass_black.png create mode 100644 src/main/java/phantom/texture/glass_blue.png create mode 100644 src/main/java/phantom/texture/glass_brown.png create mode 100644 src/main/java/phantom/texture/glass_cyan.png create mode 100644 src/main/java/phantom/texture/glass_gray.png create mode 100644 src/main/java/phantom/texture/glass_green.png create mode 100644 src/main/java/phantom/texture/glass_light_blue.png create mode 100644 src/main/java/phantom/texture/glass_lime.png create mode 100644 src/main/java/phantom/texture/glass_magenta.png create mode 100644 src/main/java/phantom/texture/glass_orange.png create mode 100644 src/main/java/phantom/texture/glass_pane_top.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_black.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_blue.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_brown.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_cyan.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_gray.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_green.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_light_blue.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_lime.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_magenta.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_orange.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_pink.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_purple.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_red.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_silver.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_white.png create mode 100644 src/main/java/phantom/texture/glass_pane_top_yellow.png create mode 100644 src/main/java/phantom/texture/glass_pink.png create mode 100644 src/main/java/phantom/texture/glass_purple.png create mode 100644 src/main/java/phantom/texture/glass_red.png create mode 100644 src/main/java/phantom/texture/glass_silver.png create mode 100644 src/main/java/phantom/texture/glass_white.png create mode 100644 src/main/java/phantom/texture/glass_yellow.png create mode 100644 src/main/java/phantom/texture/glowstone.png create mode 100644 src/main/java/phantom/texture/gold_block.png create mode 100644 src/main/java/phantom/texture/gold_ore.png create mode 100644 src/main/java/phantom/texture/grass_side.png create mode 100644 src/main/java/phantom/texture/grass_side_overlay.png create mode 100644 src/main/java/phantom/texture/grass_side_snowed.png create mode 100644 src/main/java/phantom/texture/grass_top.png create mode 100644 src/main/java/phantom/texture/gravel.png create mode 100644 src/main/java/phantom/texture/hardened_clay.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_black.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_blue.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_brown.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_cyan.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_gray.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_green.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_light_blue.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_lime.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_magenta.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_orange.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_pink.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_purple.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_red.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_silver.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_white.png create mode 100644 src/main/java/phantom/texture/hardened_clay_stained_yellow.png create mode 100644 src/main/java/phantom/texture/hay_block_side.png create mode 100644 src/main/java/phantom/texture/hay_block_top.png create mode 100644 src/main/java/phantom/texture/hopper_inside.png create mode 100644 src/main/java/phantom/texture/hopper_outside.png create mode 100644 src/main/java/phantom/texture/hopper_top.png create mode 100644 src/main/java/phantom/texture/ice.png create mode 100644 src/main/java/phantom/texture/ice_packed.png create mode 100644 src/main/java/phantom/texture/iron_bars.png create mode 100644 src/main/java/phantom/texture/iron_block.png create mode 100644 src/main/java/phantom/texture/iron_ore.png create mode 100644 src/main/java/phantom/texture/iron_trapdoor.png create mode 100644 src/main/java/phantom/texture/itemframe_background.png create mode 100644 src/main/java/phantom/texture/jukebox_side.png create mode 100644 src/main/java/phantom/texture/jukebox_top.png create mode 100644 src/main/java/phantom/texture/ladder.png create mode 100644 src/main/java/phantom/texture/lapis_block.png create mode 100644 src/main/java/phantom/texture/lapis_ore.png create mode 100644 src/main/java/phantom/texture/lava_flow.png create mode 100644 src/main/java/phantom/texture/lava_still.png create mode 100644 src/main/java/phantom/texture/leaves_acacia.png create mode 100644 src/main/java/phantom/texture/leaves_big_oak.png create mode 100644 src/main/java/phantom/texture/leaves_birch.png create mode 100644 src/main/java/phantom/texture/leaves_jungle.png create mode 100644 src/main/java/phantom/texture/leaves_oak.png create mode 100644 src/main/java/phantom/texture/leaves_spruce.png create mode 100644 src/main/java/phantom/texture/lever.png create mode 100644 src/main/java/phantom/texture/log_acacia.png create mode 100644 src/main/java/phantom/texture/log_acacia_top.png create mode 100644 src/main/java/phantom/texture/log_big_oak.png create mode 100644 src/main/java/phantom/texture/log_big_oak_top.png create mode 100644 src/main/java/phantom/texture/log_birch.png create mode 100644 src/main/java/phantom/texture/log_birch_top.png create mode 100644 src/main/java/phantom/texture/log_jungle.png create mode 100644 src/main/java/phantom/texture/log_jungle_top.png create mode 100644 src/main/java/phantom/texture/log_oak.png create mode 100644 src/main/java/phantom/texture/log_oak_top.png create mode 100644 src/main/java/phantom/texture/log_spruce.png create mode 100644 src/main/java/phantom/texture/log_spruce_top.png create mode 100644 src/main/java/phantom/texture/melon_side.png create mode 100644 src/main/java/phantom/texture/melon_stem_connected.png create mode 100644 src/main/java/phantom/texture/melon_stem_disconnected.png create mode 100644 src/main/java/phantom/texture/melon_top.png create mode 100644 src/main/java/phantom/texture/mob_spawner.png create mode 100644 src/main/java/phantom/texture/mushroom_block_inside.png create mode 100644 src/main/java/phantom/texture/mushroom_block_skin_brown.png create mode 100644 src/main/java/phantom/texture/mushroom_block_skin_red.png create mode 100644 src/main/java/phantom/texture/mushroom_block_skin_stem.png create mode 100644 src/main/java/phantom/texture/mushroom_brown.png create mode 100644 src/main/java/phantom/texture/mushroom_red.png create mode 100644 src/main/java/phantom/texture/mycelium_side.png create mode 100644 src/main/java/phantom/texture/mycelium_top.png create mode 100644 src/main/java/phantom/texture/nether_brick.png create mode 100644 src/main/java/phantom/texture/nether_wart_stage_0.png create mode 100644 src/main/java/phantom/texture/nether_wart_stage_1.png create mode 100644 src/main/java/phantom/texture/nether_wart_stage_2.png create mode 100644 src/main/java/phantom/texture/netherrack.png create mode 100644 src/main/java/phantom/texture/noteblock.png create mode 100644 src/main/java/phantom/texture/obsidian.png create mode 100644 src/main/java/phantom/texture/package-info.java create mode 100644 src/main/java/phantom/texture/piston_bottom.png create mode 100644 src/main/java/phantom/texture/piston_inner.png create mode 100644 src/main/java/phantom/texture/piston_side.png create mode 100644 src/main/java/phantom/texture/piston_top_normal.png create mode 100644 src/main/java/phantom/texture/piston_top_sticky.png create mode 100644 src/main/java/phantom/texture/planks_acacia.png create mode 100644 src/main/java/phantom/texture/planks_big_oak.png create mode 100644 src/main/java/phantom/texture/planks_birch.png create mode 100644 src/main/java/phantom/texture/planks_jungle.png create mode 100644 src/main/java/phantom/texture/planks_oak.png create mode 100644 src/main/java/phantom/texture/planks_spruce.png create mode 100644 src/main/java/phantom/texture/portal.png create mode 100644 src/main/java/phantom/texture/potatoes_stage_0.png create mode 100644 src/main/java/phantom/texture/potatoes_stage_1.png create mode 100644 src/main/java/phantom/texture/potatoes_stage_2.png create mode 100644 src/main/java/phantom/texture/potatoes_stage_3.png create mode 100644 src/main/java/phantom/texture/prismarine_bricks.png create mode 100644 src/main/java/phantom/texture/prismarine_dark.png create mode 100644 src/main/java/phantom/texture/prismarine_rough.png create mode 100644 src/main/java/phantom/texture/pumpkin_face_off.png create mode 100644 src/main/java/phantom/texture/pumpkin_face_on.png create mode 100644 src/main/java/phantom/texture/pumpkin_side.png create mode 100644 src/main/java/phantom/texture/pumpkin_stem_connected.png create mode 100644 src/main/java/phantom/texture/pumpkin_stem_disconnected.png create mode 100644 src/main/java/phantom/texture/pumpkin_top.png create mode 100644 src/main/java/phantom/texture/quartz_block_bottom.png create mode 100644 src/main/java/phantom/texture/quartz_block_chiseled.png create mode 100644 src/main/java/phantom/texture/quartz_block_chiseled_top.png create mode 100644 src/main/java/phantom/texture/quartz_block_lines.png create mode 100644 src/main/java/phantom/texture/quartz_block_lines_top.png create mode 100644 src/main/java/phantom/texture/quartz_block_side.png create mode 100644 src/main/java/phantom/texture/quartz_block_top.png create mode 100644 src/main/java/phantom/texture/quartz_ore.png create mode 100644 src/main/java/phantom/texture/rail_activator.png create mode 100644 src/main/java/phantom/texture/rail_activator_powered.png create mode 100644 src/main/java/phantom/texture/rail_detector.png create mode 100644 src/main/java/phantom/texture/rail_detector_powered.png create mode 100644 src/main/java/phantom/texture/rail_golden.png create mode 100644 src/main/java/phantom/texture/rail_golden_powered.png create mode 100644 src/main/java/phantom/texture/rail_normal.png create mode 100644 src/main/java/phantom/texture/rail_normal_turned.png create mode 100644 src/main/java/phantom/texture/red_sand.png create mode 100644 src/main/java/phantom/texture/red_sandstone_bottom.png create mode 100644 src/main/java/phantom/texture/red_sandstone_carved.png create mode 100644 src/main/java/phantom/texture/red_sandstone_normal.png create mode 100644 src/main/java/phantom/texture/red_sandstone_smooth.png create mode 100644 src/main/java/phantom/texture/red_sandstone_top.png create mode 100644 src/main/java/phantom/texture/redstone_block.png create mode 100644 src/main/java/phantom/texture/redstone_dust_cross.png create mode 100644 src/main/java/phantom/texture/redstone_dust_cross_overlay.png create mode 100644 src/main/java/phantom/texture/redstone_dust_line.png create mode 100644 src/main/java/phantom/texture/redstone_dust_line_overlay.png create mode 100644 src/main/java/phantom/texture/redstone_lamp_off.png create mode 100644 src/main/java/phantom/texture/redstone_lamp_on.png create mode 100644 src/main/java/phantom/texture/redstone_ore.png create mode 100644 src/main/java/phantom/texture/redstone_torch_off.png create mode 100644 src/main/java/phantom/texture/redstone_torch_on.png create mode 100644 src/main/java/phantom/texture/reeds.png create mode 100644 src/main/java/phantom/texture/repeater_off.png create mode 100644 src/main/java/phantom/texture/repeater_on.png create mode 100644 src/main/java/phantom/texture/sand.png create mode 100644 src/main/java/phantom/texture/sandstone_bottom.png create mode 100644 src/main/java/phantom/texture/sandstone_carved.png create mode 100644 src/main/java/phantom/texture/sandstone_normal.png create mode 100644 src/main/java/phantom/texture/sandstone_smooth.png create mode 100644 src/main/java/phantom/texture/sandstone_top.png create mode 100644 src/main/java/phantom/texture/sapling_acacia.png create mode 100644 src/main/java/phantom/texture/sapling_birch.png create mode 100644 src/main/java/phantom/texture/sapling_jungle.png create mode 100644 src/main/java/phantom/texture/sapling_oak.png create mode 100644 src/main/java/phantom/texture/sapling_roofed_oak.png create mode 100644 src/main/java/phantom/texture/sapling_spruce.png create mode 100644 src/main/java/phantom/texture/sea_lantern.png create mode 100644 src/main/java/phantom/texture/slime.png create mode 100644 src/main/java/phantom/texture/snow.png create mode 100644 src/main/java/phantom/texture/soul_sand.png create mode 100644 src/main/java/phantom/texture/sponge.png create mode 100644 src/main/java/phantom/texture/sponge_wet.png create mode 100644 src/main/java/phantom/texture/stone.png create mode 100644 src/main/java/phantom/texture/stone_andesite.png create mode 100644 src/main/java/phantom/texture/stone_andesite_smooth.png create mode 100644 src/main/java/phantom/texture/stone_diorite.png create mode 100644 src/main/java/phantom/texture/stone_diorite_smooth.png create mode 100644 src/main/java/phantom/texture/stone_granite.png create mode 100644 src/main/java/phantom/texture/stone_granite_smooth.png create mode 100644 src/main/java/phantom/texture/stone_slab_side.png create mode 100644 src/main/java/phantom/texture/stone_slab_top.png create mode 100644 src/main/java/phantom/texture/stonebrick.png create mode 100644 src/main/java/phantom/texture/stonebrick_carved.png create mode 100644 src/main/java/phantom/texture/stonebrick_cracked.png create mode 100644 src/main/java/phantom/texture/stonebrick_mossy.png create mode 100644 src/main/java/phantom/texture/tallgrass.png create mode 100644 src/main/java/phantom/texture/tnt_bottom.png create mode 100644 src/main/java/phantom/texture/tnt_side.png create mode 100644 src/main/java/phantom/texture/tnt_top.png create mode 100644 src/main/java/phantom/texture/torch_on.png create mode 100644 src/main/java/phantom/texture/trapdoor.png create mode 100644 src/main/java/phantom/texture/trip_wire.png create mode 100644 src/main/java/phantom/texture/trip_wire_source.png create mode 100644 src/main/java/phantom/texture/vine.png create mode 100644 src/main/java/phantom/texture/water_flow.png create mode 100644 src/main/java/phantom/texture/water_still.png create mode 100644 src/main/java/phantom/texture/waterlily.png create mode 100644 src/main/java/phantom/texture/web.png create mode 100644 src/main/java/phantom/texture/wheat_stage_0.png create mode 100644 src/main/java/phantom/texture/wheat_stage_1.png create mode 100644 src/main/java/phantom/texture/wheat_stage_2.png create mode 100644 src/main/java/phantom/texture/wheat_stage_3.png create mode 100644 src/main/java/phantom/texture/wheat_stage_4.png create mode 100644 src/main/java/phantom/texture/wheat_stage_5.png create mode 100644 src/main/java/phantom/texture/wheat_stage_6.png create mode 100644 src/main/java/phantom/texture/wheat_stage_7.png create mode 100644 src/main/java/phantom/texture/wool_colored_black.png create mode 100644 src/main/java/phantom/texture/wool_colored_blue.png create mode 100644 src/main/java/phantom/texture/wool_colored_brown.png create mode 100644 src/main/java/phantom/texture/wool_colored_cyan.png create mode 100644 src/main/java/phantom/texture/wool_colored_gray.png create mode 100644 src/main/java/phantom/texture/wool_colored_green.png create mode 100644 src/main/java/phantom/texture/wool_colored_light_blue.png create mode 100644 src/main/java/phantom/texture/wool_colored_lime.png create mode 100644 src/main/java/phantom/texture/wool_colored_magenta.png create mode 100644 src/main/java/phantom/texture/wool_colored_orange.png create mode 100644 src/main/java/phantom/texture/wool_colored_pink.png create mode 100644 src/main/java/phantom/texture/wool_colored_purple.png create mode 100644 src/main/java/phantom/texture/wool_colored_red.png create mode 100644 src/main/java/phantom/texture/wool_colored_silver.png create mode 100644 src/main/java/phantom/texture/wool_colored_white.png create mode 100644 src/main/java/phantom/texture/wool_colored_yellow.png create mode 100644 src/main/java/phantom/util/data/Alphabet.java create mode 100644 src/main/java/phantom/util/files/IO.java create mode 100644 src/main/java/phantom/world/Chunks.java create mode 100644 src/main/java/phantom/world/Worlds.java diff --git a/src/main/java/org/phantomapi/sfx/Aud.java b/src/main/java/org/phantomapi/sfx/Aud.java new file mode 100644 index 000000000..b6c678f12 --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/Aud.java @@ -0,0 +1,39 @@ +package org.phantomapi.sfx; + +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Player; + +import phantom.lang.GSound; + +/** + * Audio sounds commonly used + * + * @author cyberpwn + */ +public enum Aud +{ + CLICK(new GSound(Sound.UI_BUTTON_CLICK, 1f, 1.5f)); + + private Audible aud; + + private Aud(Audible aud) + { + this.aud = aud; + } + + public Audible get() + { + return aud; + } + + public void play(Player p) + { + get().play(p); + } + + public void play(Location l) + { + get().play(l); + } +} diff --git a/src/main/java/org/phantomapi/sfx/Audible.java b/src/main/java/org/phantomapi/sfx/Audible.java new file mode 100644 index 000000000..1c1fbc314 --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/Audible.java @@ -0,0 +1,89 @@ +package org.phantomapi.sfx; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +/** + * Allows you to wrap either objects or more folders of wrappers into one + * audible object allowing multiple sounds at different pitches and volumes be + * played with one object + * + * @author cyberpwn + * + */ +public interface Audible +{ + /** + * Play the sound to just the player + * + * @param p + * the player + * @param l + * the location + */ + public void play(Player p, Location l); + + /** + * Play the sound to just the player + * + * @param p + * the player + */ + public void play(Player p); + + /** + * Play the sound globally + * + * @param l + * the location + */ + public void play(Location l); + + /** + * Play the sound to the player + * + * @param p + * the player + * @param v + * relative to the players location + */ + public void play(Player p, Vector v); + + /** + * Get volume + * + * @return the volume + */ + public Float getVolume(); + + /** + * Sets the volume + * + * @param volume + * the volume + */ + public void setVolume(Float volume); + + /** + * get the pitch + * + * @return the pitch + */ + public Float getPitch(); + + /** + * Set the pitch + * + * @param pitch + * the pitch + */ + public void setPitch(Float pitch); + + /** + * Clone the audio + * + * @return the audio + */ + public Audible clone(); +} diff --git a/src/main/java/org/phantomapi/sfx/AudibleEntity.java b/src/main/java/org/phantomapi/sfx/AudibleEntity.java new file mode 100644 index 000000000..17ef16073 --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/AudibleEntity.java @@ -0,0 +1,117 @@ +package org.phantomapi.sfx; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import phantom.sched.Task; +import phantom.world.Area; + +/** + * Audio bound to entities + * + * @author cyberpwn + * + */ +public class AudibleEntity +{ + private Entity entity; + private Audible audible; + private Task task; + + /** + * Create the audio bind to an entity + * + * @param entity + * the entity + * @param audible + * the audio + * @param interval + * the interval in ticks to play + */ + public AudibleEntity(Entity entity, Audible audible, Integer interval) + { + this.entity = entity; + this.audible = audible; + this.task = null; + + if(interval > -1) + { + task = new Task(interval) + { + @Override + public void run() + { + if(entity == null || entity.isDead()) + { + cancel(); + return; + } + + Area a = new Area(entity.getLocation(), 64); + + for(Player i : a.getNearbyPlayers()) + { + onPlay(i, audible.clone(), entity); + } + } + }; + } + } + + /** + * Stop playing the sound + */ + public void cancel() + { + if(task != null) + { + task.cancel(); + } + } + + /** + * Override when played + * + * @param i + * the player + * @param audible + * the sound + * @param entity + * the entity + */ + protected void onPlay(Player i, Audible audible, Entity entity) + { + audible.play(i, entity.getLocation()); + } + + /** + * Get the audible sound + * + * @return the sound + */ + public Audible getAudible() + { + return audible; + } + + /** + * Set the sound + * + * @param audible + * the sound + */ + public void setAudible(Audible audible) + { + this.audible = audible; + } + + /** + * Get the entity + * + * @return the entity + */ + public Entity getEntity() + { + return entity; + } +} diff --git a/src/main/java/org/phantomapi/sfx/Audio.java b/src/main/java/org/phantomapi/sfx/Audio.java new file mode 100644 index 000000000..b6a505e78 --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/Audio.java @@ -0,0 +1,142 @@ +package org.phantomapi.sfx; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import phantom.lang.GList; +import phantom.math.Average; + +/** + * A collection of audibles which may contain more sub-audibles or actual sound + * objects. This allows you to create sounds with mixtures of multiple sounds + * and volumes + * + * @author cyberpwn + */ +public class Audio implements Audible +{ + private GList audibles; + + /** + * Create an audible object + */ + public Audio() + { + audibles = new GList(); + } + + /** + * Create an audible entity with multiple sub-audibles + * + * @param audibles + * the audibles + */ + public Audio(GList audibles) + { + this.audibles = audibles; + } + + @Override + public Audible clone() + { + return new Audio(audibles); + } + + /** + * Add an audible object to the sound entity + * + * @param audible + * to be played with the others + */ + public void add(Audible audible) + { + audibles.add(audible); + } + + public Audio qadd(Audible audible) + { + audibles.add(audible); + return this; + } + + @Override + public void play(Player p, Location l) + { + for(Audible i : audibles) + { + i.play(p, l); + } + } + + @Override + public void play(Player p) + { + for(Audible i : audibles) + { + i.play(p); + } + } + + @Override + public void play(Location l) + { + for(Audible i : audibles) + { + i.play(l); + } + } + + @Override + public void play(Player p, Vector v) + { + for(Audible i : audibles) + { + i.play(p, v); + } + } + + @Override + public Float getVolume() + { + Average a = new Average(-1); + + for(Audible i : audibles) + { + a.put(i.getVolume()); + } + + return (float) a.getAverage(); + } + + @Override + public void setVolume(Float volume) + { + for(Audible i : audibles) + { + i.setVolume(volume); + } + } + + @Override + public Float getPitch() + { + Average a = new Average(-1); + + for(Audible i : audibles) + { + a.put(i.getPitch()); + } + + return (float) a.getAverage(); + } + + @Override + public void setPitch(Float pitch) + { + for(Audible i : audibles) + { + i.setPitch(pitch); + } + } +} diff --git a/src/main/java/org/phantomapi/sfx/AudioDistortion.java b/src/main/java/org/phantomapi/sfx/AudioDistortion.java new file mode 100644 index 000000000..e5b66ea58 --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/AudioDistortion.java @@ -0,0 +1,11 @@ +package org.phantomapi.sfx; + +public abstract class AudioDistortion +{ + public AudioDistortion() + { + + } + + public abstract Audible distort(Audible a); +} diff --git a/src/main/java/org/phantomapi/sfx/BasicSequencer.java b/src/main/java/org/phantomapi/sfx/BasicSequencer.java new file mode 100644 index 000000000..84df79278 --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/BasicSequencer.java @@ -0,0 +1,221 @@ +package org.phantomapi.sfx; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import phantom.lang.GMap; +import phantom.sched.Task; + +/** + * Represents a basic sequencer + * + * @author cyberpwn + */ +public class BasicSequencer implements Sequencer +{ + private float volume; + private float pitch; + private GMap table; + private int playhead; + private boolean playing; + + public BasicSequencer() + { + volume = 1f; + pitch = 1f; + table = new GMap(); + playhead = 0; + playing = false; + } + + @Override + public void play(Player p, Location l) + { + new Task(0) + { + @Override + public void run() + { + if(playhead >= getLength()) + { + cancel(); + playing = false; + } + + if(playing) + { + for(Audible i : table.k()) + { + if(table.get(i) == playhead) + { + i.play(p, l); + } + } + + playhead++; + } + } + }; + } + + @Override + public void play(Player p) + { + new Task(0) + { + @Override + public void run() + { + if(playhead >= getLength()) + { + cancel(); + playing = false; + } + + if(playing) + { + for(Audible i : table.k()) + { + if(table.get(i) == playhead) + { + i.play(p); + } + } + + playhead++; + } + } + }; + } + + @Override + public void play(Location l) + { + new Task(0) + { + @Override + public void run() + { + if(playhead >= getLength()) + { + cancel(); + playing = false; + } + + if(playing) + { + for(Audible i : table.k()) + { + if(table.get(i) == playhead) + { + i.play(l); + } + } + + playhead++; + } + } + }; + } + + @Override + public void play(Player p, Vector v) + { + new Task(0) + { + @Override + public void run() + { + if(playhead >= getLength()) + { + cancel(); + playing = false; + } + + if(playing) + { + for(Audible i : table.k()) + { + if(table.get(i) == playhead) + { + i.play(p, v); + } + } + + playhead++; + } + } + }; + } + + @Override + public Float getVolume() + { + return volume; + } + + @Override + public void setVolume(Float volume) + { + this.volume = volume; + } + + @Override + public Float getPitch() + { + return pitch; + } + + @Override + public void setPitch(Float pitch) + { + this.pitch = pitch; + } + + @Override + public Audible clone() + { + return null; + } + + @Override + public void add(Audible a, int timing) + { + table.put(a, timing); + } + + @Override + public boolean isPlaying() + { + return playing; + } + + @Override + public void setPlayHead(int p) + { + playhead = p; + } + + @Override + public int getLength() + { + int max = 0; + + for(Audible i : table.k()) + { + if(table.get(i) > max) + { + max = table.get(i); + } + } + + return max; + } + + @Override + public int getPlayHead() + { + return playhead; + } +} diff --git a/src/main/java/org/phantomapi/sfx/DopplerAudibleEntity.java b/src/main/java/org/phantomapi/sfx/DopplerAudibleEntity.java new file mode 100644 index 000000000..dabcab508 --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/DopplerAudibleEntity.java @@ -0,0 +1,32 @@ +package org.phantomapi.sfx; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import phantom.math.physics.VectorMath; + +/** + * Doppler audio effect + * + * @author cyberpwn + * + */ +public class DopplerAudibleEntity extends AudibleEntity +{ + public DopplerAudibleEntity(Entity entity, Audible audible, Integer interval) + { + super(entity, audible, interval); + } + + @Override + protected void onPlay(Player i, Audible audible, Entity entity) + { + Vector pv = i.getVelocity(); + Vector ev = entity.getVelocity(); + Double speedDifference = VectorMath.getSpeed(pv.subtract(ev)) * (entity.getLocation().distance(i.getLocation())); + audible.setPitch((float) ((float) (audible.getPitch() / speedDifference) * 10)); + audible.play(i, entity.getLocation()); + System.out.println("Speed: " + speedDifference + " Pitch: " + audible.getPitch()); + } +} diff --git a/src/main/java/org/phantomapi/sfx/Instrument.java b/src/main/java/org/phantomapi/sfx/Instrument.java new file mode 100644 index 000000000..9a7a503af --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/Instrument.java @@ -0,0 +1,123 @@ +package org.phantomapi.sfx; + +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Player; + +import phantom.lang.GSound; + +public enum Instrument +{ + CLICK(new MFADistortion(6, 0.1f).distort(new GSound(Sound.BLOCK_LEVER_CLICK, 1f, 1.7f))), + KINDLE_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.BLOCK_FURNACE_FIRE_CRACKLE, 1f, 1f))), + KINDLE_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.BLOCK_FURNACE_FIRE_CRACKLE, 1f, 0.6f))), + KINDLE_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.BLOCK_FURNACE_FIRE_CRACKLE, 1f, 0.1f))), + KINDLE_WIDE(new MFADistortion(6, 0.1f).distort(new GSound(Sound.BLOCK_FURNACE_FIRE_CRACKLE, 1f, 1.9f))), + + GRAVEL_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.BLOCK_SAND_STEP, 1f, 1f))), + GRAVEL_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.BLOCK_SAND_STEP, 1f, 0.6f))), + GRAVEL_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.BLOCK_SAND_STEP, 1f, 0.1f))), + GRAVEL_WIDE(new MFADistortion(6, 0.1f).distort(new GSound(Sound.BLOCK_SAND_STEP, 1f, 1.9f))), + + BWANG_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_ARROW_HIT, 1f, 1f))), + BWANG_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_ARROW_HIT, 1f, 0.6f))), + BWANG_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_ARROW_HIT, 1f, 0.1f))), + + POCKET_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_DONKEY_CHEST, 1f, 1f))), + POCKET_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_DONKEY_CHEST, 1f, 0.6f))), + POCKET_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_DONKEY_CHEST, 1f, 0.1f))), + + SWEEP_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_PLAYER_ATTACK_SWEEP, 1f, 1f))), + SWEEP_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_PLAYER_ATTACK_SWEEP, 1f, 0.6f))), + SWEEP_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_PLAYER_ATTACK_SWEEP, 1f, 0.1f))), + + BOB_CLOSE_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_BOBBER_THROW, 1f, 1f))), + BOB_CLOSE_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_BOBBER_THROW, 1f, 0.6f))), + BOB_CLOSE_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_BOBBER_THROW, 1f, 0.1f))), + + THICK_CLOSE_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_SHULKER_CLOSE, 1f, 1f))), + THICK_CLOSE_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_SHULKER_CLOSE, 1f, 0.6f))), + THICK_CLOSE_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_SHULKER_CLOSE, 1f, 0.1f))), + + BRITTLE_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_ARMORSTAND_BREAK, 1f, 1f))), + BRITTLE_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_ARMORSTAND_BREAK, 1f, 0.6f))), + BRITTLE_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_ARMORSTAND_BREAK, 1f, 0.1f))), + + SHOOT_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_SHULKER_SHOOT, 1f, 1f))), + SHOOT_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_SHULKER_SHOOT, 1f, 0.6f))), + SHOOT_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_SHULKER_SHOOT, 1f, 0.1f))), + + TWIG_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_PAINTING_PLACE, 1f, 1f))), + TWIG_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_PAINTING_PLACE, 1f, 0.6f))), + TWIG_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_PAINTING_PLACE, 1f, 0.1f))), + + WOOD_CRACK_HIGH(new MFADistortion(9, 1.9f).distort(new GSound(Sound.ENTITY_ZOMBIE_BREAK_DOOR_WOOD, 0.3f, 1f))), + WOOD_CRACK_MID(new MFADistortion(9, 1.5f).distort(new GSound(Sound.ENTITY_ZOMBIE_BREAK_DOOR_WOOD, 0.3f, 0.6f))), + WOOD_CRACK_LOW(new MFADistortion(9, 0.7f).distort(new GSound(Sound.ENTITY_ZOMBIE_BREAK_DOOR_WOOD, 0.3f, 0.1f))), + + CRUMBLE_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.BLOCK_CHORUS_FLOWER_DEATH, 1f, 1f))), + CRUMBLE_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.BLOCK_CHORUS_FLOWER_DEATH, 1f, 0.6f))), + CRUMBLE_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.BLOCK_CHORUS_FLOWER_DEATH, 1f, 0.1f))), + + CRAWL_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.BLOCK_CHORUS_FLOWER_GROW, 1f, 1f))), + CRAWL_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.BLOCK_CHORUS_FLOWER_GROW, 1f, 0.6f))), + CRAWL_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.BLOCK_CHORUS_FLOWER_GROW, 1f, 0.1f))), + + METAL_CLINK_HIGH(new MFADistortion(8, 1.9f).distort(new GSound(Sound.BLOCK_IRON_TRAPDOOR_CLOSE, 1f, 1f))), + METAL_CLINK_MID(new MFADistortion(8, 1.5f).distort(new GSound(Sound.BLOCK_IRON_TRAPDOOR_CLOSE, 1f, 0.6f))), + METAL_CLINK_LOW(new MFADistortion(8, 1f).distort(new GSound(Sound.BLOCK_IRON_TRAPDOOR_CLOSE, 1f, 0.2f))), + + DEEP_THUMP_HIGH(new MFADistortion(8, 1.9f).distort(new GSound(Sound.ENTITY_SHULKER_BULLET_HIT, 1f, 1f))), + DEEP_THUMP_MID(new MFADistortion(8, 1.5f).distort(new GSound(Sound.ENTITY_SHULKER_BULLET_HIT, 1f, 0.6f))), + DEEP_THUMP_LOW(new MFADistortion(8, 1f).distort(new GSound(Sound.ENTITY_SHULKER_BULLET_HIT, 1f, 0.2f))), + + DEEP_PUNCH_HIGH(new MFADistortion(8, 1.9f).distort(new GSound(Sound.ENTITY_PLAYER_ATTACK_STRONG, 1f, 1f))), + DEEP_PUNCH_MID(new MFADistortion(8, 1.5f).distort(new GSound(Sound.ENTITY_PLAYER_ATTACK_STRONG, 1f, 0.6f))), + DEEP_PUNCH_LOW(new MFADistortion(8, 0.7f).distort(new GSound(Sound.ENTITY_PLAYER_ATTACK_STRONG, 1f, 0.1f))), + + DEEP_CLICK_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_FIREWORK_BLAST, 1f, 1f))), + DEEP_CLICK_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_FIREWORK_BLAST, 1f, 0.6f))), + DEEP_CLICK_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_FIREWORK_BLAST, 1f, 0.1f))), + + SHOVEL_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ITEM_SHOVEL_FLATTEN, 1f, 1f))), + SHOVEL_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ITEM_SHOVEL_FLATTEN, 1f, 0.6f))), + SHOVEL_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ITEM_SHOVEL_FLATTEN, 1f, 0.1f))), + + DEEP_BOOM_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_FIREWORK_LARGE_BLAST_FAR, 1f, 1f))), + DEEP_BOOM_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_FIREWORK_LARGE_BLAST_FAR, 1f, 0.6f))), + DEEP_BOOM_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_FIREWORK_LARGE_BLAST_FAR, 1f, 0.1f))), + + DEEP_SQUELCH_HIGH(new MFADistortion(6, 1.9f).distort(new GSound(Sound.ENTITY_SLIME_SQUISH, 1f, 1f))), + DEEP_SQUELCH_MID(new MFADistortion(6, 1.5f).distort(new GSound(Sound.ENTITY_SLIME_SQUISH, 1f, 0.6f))), + DEEP_SQUELCH_LOW(new MFADistortion(6, 0.7f).distort(new GSound(Sound.ENTITY_SLIME_SQUISH, 1f, 0.1f))), + + METAL_HIT_HIGH(new MFADistortion(8, 1.9f).distort(new GSound(Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, 1f, 1f))), + METAL_HIT_MID(new MFADistortion(8, 1.5f).distort(new GSound(Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, 1f, 0.6f))), + METAL_HIT_LOW(new MFADistortion(8, 1f).distort(new GSound(Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, 1f, 0.2f))), + + WOOD_HIT_HIGH(new MFADistortion(8, 1.9f).distort(new GSound(Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, 1f, 1f))), + WOOD_HIT_MID(new MFADistortion(8, 1.5f).distort(new GSound(Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, 1f, 0.6f))), + WOOD_HIT_LOW(new MFADistortion(8, 1f).distort(new GSound(Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, 1f, 0.2f))); + + private Audible sound; + + private Instrument(Audible sound) + { + this.sound = sound; + } + + public void play(Location l) + { + sound.play(l); + } + + public void play(Player p) + { + sound.play(p); + } + + public void play(Player p, Location l) + { + sound.play(p, l); + } +} diff --git a/src/main/java/org/phantomapi/sfx/MFADistortion.java b/src/main/java/org/phantomapi/sfx/MFADistortion.java new file mode 100644 index 000000000..10bb6121b --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/MFADistortion.java @@ -0,0 +1,39 @@ +package org.phantomapi.sfx; + +public class MFADistortion extends AudioDistortion +{ + private int span; + private float to; + + public MFADistortion(int span, float to) + { + this.span = span; + this.to = to; + } + + @Override + public Audible distort(Audible a) + { + Audio n = new Audio(); + + float start = a.getPitch(); + + if(start > to) + { + float st = start; + start = to; + to = st; + a.setPitch(start); + } + + for(int i = 0; i < span; i++) + { + Float diff = i * ((to - start) / span); + Audible ab = a.clone(); + ab.setPitch(start + diff); + n.add(ab); + } + + return n; + } +} diff --git a/src/main/java/org/phantomapi/sfx/Sequencer.java b/src/main/java/org/phantomapi/sfx/Sequencer.java new file mode 100644 index 000000000..32fd0a882 --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/Sequencer.java @@ -0,0 +1,48 @@ +package org.phantomapi.sfx; + +/** + * Sequencing of audio + * + * @author cyberpwn + */ +public interface Sequencer extends Audible +{ + /** + * Add an audible object to the track with a time slot (in ticks) + * + * @param a + * the audible + * @param timing + * the amount of ticks into the sequence + */ + public void add(Audible a, int timing); + + /** + * Is the sequencer currently playing? + * + * @return true if it is + */ + public boolean isPlaying(); + + /** + * Set the position of the playhead + * + * @param p + * the positition + */ + public void setPlayHead(int p); + + /** + * Get the length of this sequence in ticks + * + * @return the length or 0 + */ + public int getLength(); + + /** + * Get the position of the playhead + * + * @return the playhead position + */ + public int getPlayHead(); +} diff --git a/src/main/java/org/phantomapi/sfx/package-info.java b/src/main/java/org/phantomapi/sfx/package-info.java new file mode 100644 index 000000000..4dfd8b17c --- /dev/null +++ b/src/main/java/org/phantomapi/sfx/package-info.java @@ -0,0 +1,5 @@ +/** + * Audio, Sound structures and distorters. WARNING OUT OF DATE. 1.8.8 AND BELOW + * ONLY + */ +package org.phantomapi.sfx; \ No newline at end of file diff --git a/src/main/java/phantom/lang/ByteMap2D.java b/src/main/java/phantom/lang/ByteMap2D.java new file mode 100644 index 000000000..722cd29c3 --- /dev/null +++ b/src/main/java/phantom/lang/ByteMap2D.java @@ -0,0 +1,127 @@ +package phantom.lang; + +/** + * Two dimensional byte map + * + * @author cyberpwn + */ +public class ByteMap2D +{ + private final byte[][] map; + private final int width; + private final int height; + + /** + * Create a byte map + * + * @param x + * the width + * @param y + * the height + * @param b + * the byte to fill it initially with + */ + public ByteMap2D(int x, int y, byte b) + { + this.map = new byte[x][y]; + this.width = x; + this.height = y; + + clear(b); + } + + /** + * Clear the map + * + * @param x1 + * the first x + * @param y1 + * the first y + * @param x2 + * the second x + * @param y2 + * the second y + * @param b + * the byte to clear it with + */ + public void clear(int x1, int y1, int x2, int y2, byte b) + { + for(int x = x1; x < x2; x++) + { + for(int y = y1; y < y2; y++) + { + set(x, y, b); + } + } + } + + /** + * Clear the entire byte map with the given byte + * + * @param b + * the given byte + */ + public void clear(byte b) + { + clear(0, 0, width, height, b); + } + + /** + * Set the given x and y to a byte + * + * @param x + * the x + * @param y + * the y + * @param b + * the byte + */ + public void set(int x, int y, byte b) + { + map[x][y] = b; + } + + /** + * Get the given x and y byte + * + * @param x + * the x + * @param y + * the y + * @return the byte + */ + public byte get(int x, int y) + { + return map[x][y]; + } + + /** + * Get the byte array + * + * @return the byte array + */ + public byte[][] getMap() + { + return map; + } + + /** + * Get the width + * + * @return the width + */ + public int getWidth() + { + return width; + } + + /** + * Get the height + * + * @return the height + */ + public int getHeight() + { + return height; + } +} diff --git a/src/main/java/phantom/lang/GSound.java b/src/main/java/phantom/lang/GSound.java new file mode 100644 index 000000000..67909dfc4 --- /dev/null +++ b/src/main/java/phantom/lang/GSound.java @@ -0,0 +1,291 @@ +package phantom.lang; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; +import org.phantomapi.sfx.Audible; + +/** + * A GSound can play a sound + * + * @author cyberpwn + * + */ +public class GSound implements Audible +{ + private String sound; + private Sound iSound; + private Float volume; + private Float pitch; + + /** + * Create a sound object + * + * @param sound + * the string path for the sound + * @param volume + * the volume + * @param pitch + * the pitch + */ + public GSound(String sound, Float volume, Float pitch) + { + this.sound = sound; + this.volume = volume; + this.pitch = pitch; + } + + /** + * Create a new sound object + * + * @param iSound + * the string path + * @param sound + * the sound path + * @param volume + * the volume + * @param pitch + * the pitch + */ + public GSound(Sound iSound, String sound, Float volume, Float pitch) + { + this.iSound = iSound; + this.sound = sound; + this.volume = volume; + this.pitch = pitch; + } + + /** + * Create a sound object + * + * @param sound + * the sound path + */ + public GSound(String sound) + { + this.sound = sound; + this.volume = 1f; + this.pitch = 1f; + } + + /** + * Create a new sound + * + * @param iSound + * @param volume + * @param pitch + */ + public GSound(Sound iSound, Float volume, Float pitch) + { + this.iSound = iSound; + this.volume = volume; + this.pitch = pitch; + } + + /** + * Create a new sound + * + * @param iSound + * the sound + */ + public GSound(Sound iSound) + { + this.iSound = iSound; + this.volume = 1f; + this.pitch = 1f; + } + + public void prePlay() + { + + } + + /** + * Play the sound to just one player. No one else can hear it + * + * @param p + * the player + * @param l + * the location + */ + @Override + public void play(Player p, Location l) + { + prePlay(); + + if(iSound != null) + { + p.playSound(l, iSound, volume, pitch); + } + + if(sound != null) + { + String cmd = "playsound " + sound + " " + p.getName() + " " + l.getX() + " " + l.getY() + " " + l.getZ() + " " + volume + " " + pitch; + + p.getServer().dispatchCommand(p.getServer().getConsoleSender(), cmd); + } + } + + /** + * Play the sound to just one player. No one else can hear it + * + * @param p + * the player + */ + @Override + public void play(Player p) + { + play(p, p.getLocation()); + } + + /** + * clone it + */ + @Override + public Audible clone() + { + return new GSound(iSound, sound, volume, pitch); + } + + /** + * Play the sound globally to all players + * + * @param l + * the location + */ + @Override + public void play(Location l) + { + prePlay(); + + if(iSound != null) + { + l.getWorld().playSound(l, iSound, volume, pitch); + } + + if(sound != null) + { + String cmd = "playsound " + sound + " @a " + l.getX() + " " + l.getY() + " " + l.getZ() + " " + volume + " " + pitch; + + Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd); + } + } + + /** + * Play the sound to just one player. No one else can hear it + * + * @param p + * the player + * @param v + * the vector related to the players location + */ + @Override + public void play(Player p, Vector v) + { + prePlay(); + + Location l = p.getLocation().clone().add(v); + + if(iSound != null) + { + p.playSound(l, iSound, volume, pitch); + } + + if(sound != null) + { + String cmd = "playsound " + sound + " " + p.getName() + " " + l.getX() + " " + l.getY() + " " + l.getZ() + " " + volume + " " + pitch; + + p.getServer().dispatchCommand(p.getServer().getConsoleSender(), cmd); + } + } + + /** + * Get the sound + * + * @return the sound path + */ + public String getSound() + { + return sound; + } + + /** + * Set the sound + * + * @param sound + * the sound path + */ + public void setSound(String sound) + { + this.sound = sound; + } + + /** + * Get the object sound + * + * @return the sound + */ + public Sound getiSound() + { + return iSound; + } + + /** + * Set the object sound + * + * @param iSound + * the sound + */ + public void setiSound(Sound iSound) + { + this.iSound = iSound; + } + + /** + * Get the volume + * + * @return the volume + */ + @Override + public Float getVolume() + { + return volume; + } + + /** + * Set the volume + * + * @param volume + * the volume + */ + @Override + public void setVolume(Float volume) + { + this.volume = volume; + } + + /** + * Get the pitch + * + * @return the pitch + */ + @Override + public Float getPitch() + { + return pitch; + } + + /** + * Set the pitch + * + * @param pitch + * the pitch + */ + @Override + public void setPitch(Float pitch) + { + this.pitch = pitch; + } +} diff --git a/src/main/java/phantom/lang/GTime.java b/src/main/java/phantom/lang/GTime.java new file mode 100644 index 000000000..100161168 --- /dev/null +++ b/src/main/java/phantom/lang/GTime.java @@ -0,0 +1,318 @@ +package phantom.lang; + +import java.io.Serializable; +import java.util.concurrent.TimeUnit; + +/** + * Time object for time + * + * @author cyberpwn + * + */ +public class GTime implements Serializable +{ + private static final long serialVersionUID = 1L; + private final long days, hours, minutes, seconds, milliseconds; + + /** + * Create time + * + * @param d + * days + * @param h + * hours + * @param m + * minutes + * @param s + * seconds + * @param ms + * millis + */ + public GTime(long d, long h, long m, long s, long ms) + { + this(ms + (s + m * 60 + h * 3600 + d * 86400) * 1000); + } + + /** + * Create time + * + * @param duration + * the duration in MS (use System.ctm for current) + */ + public GTime(long duration) + { + if(duration < 0) + { + throw new IllegalArgumentException("duration must be positive"); + } + + days = TimeUnit.MILLISECONDS.toDays(duration); + hours = TimeUnit.MILLISECONDS.toHours(duration) - TimeUnit.DAYS.toHours(days); + minutes = TimeUnit.MILLISECONDS.toMinutes(duration) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(duration)); + seconds = TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration)); + milliseconds = duration % 1000; + } + + /** + * Create time + * + * @param duration + * string duration of time (from tostring) + */ + public GTime(String duration) + { + duration = duration.replaceAll("(\\d)(\\D)", "$1 $2"); + + String[] fields = duration.toLowerCase().split("\\s+"); + long total = 0; + + if(fields.length > 1) + { + if(fields.length % 2 == 1) + { + throw new IllegalArgumentException("Odd number of parameters in duration specification"); + } + + for(int i = 0; i < fields.length; i += 2) + { + total += Long.parseLong(fields[i]) * getMult(fields[i + 1]); + } + } + + else if(fields.length == 1) + { + total = Long.parseLong(fields[0]) * 1000; + } + + else + { + throw new IllegalArgumentException("Empty duration specification"); + } + + GTime d = new GTime(total); + days = d.getDays(); + hours = d.getHours(); + minutes = d.getMinutes(); + seconds = d.getSeconds(); + milliseconds = d.getMilliseconds(); + } + + private int getMult(String str) + { + if(str.startsWith("ms") || str.startsWith("mil")) + { + return 1; + } + + else if(str.startsWith("s")) + { + return 1000; + } + + else if(str.startsWith("m")) + { + return 60000; + } + + else if(str.startsWith("h")) + { + return 3600000; + } + + else if(str.startsWith("d")) + { + return 86400000; + } + + else + { + throw new IllegalArgumentException("Unknown duration specifier " + str); + } + } + + public long getDays() + { + return days; + } + + public long getHours() + { + return hours; + } + + public long getMinutes() + { + return minutes; + } + + public long getSeconds() + { + return seconds; + } + + public long getMilliseconds() + { + return milliseconds; + } + + public long getTotalDuration() + { + return milliseconds + (seconds + minutes * 60 + hours * 3600 + days * 86400) * 1000; + } + + /** + * Describe time + * + * @return string time + */ + public String shortDescription() + { + if(days == 0 && milliseconds == 0) + { + return String.format("%02d:%02d:%02d", hours, minutes, seconds); + } + + else if(days > 0 && milliseconds == 0) + { + return String.format("%dd%02d:%02d:%02d", days, hours, minutes, seconds); + } + + else if(days == 0 && milliseconds > 0) + { + return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, milliseconds); + } + + else + { + return String.format("%dd%02d:%02d:%02d.%03d", days, hours, minutes, seconds, milliseconds); + } + } + + private String s(long x) + { + if(x == 1) + { + return ""; + } + + return "s"; + } + + /** + * short time rep + * + * @return string time + */ + public String to() + { + return to(""); + } + + /** + * Returns time with a suffix + * + * @param suff + * the suffix + * @return the time + */ + public String to(String suff) + { + int months = (int) (days / 30); + int years = (int)(months / 12); + + if(years > 0) + { + return years + " year" + s((int) (months / 12)) + " " + suff; + } + + if(months > 0) + { + return months + " month" + s((int) (days / 30)) + " " + suff; + } + + if(days > 0) + { + return days + " day" + s(days) + " " + suff; + } + + if(hours > 0) + { + return hours + " hour" + s(hours) + " " + suff; + } + + if(minutes > 0) + { + return minutes + " minute" + s(minutes) + " " + suff; + } + + if(seconds > 0) + { + return seconds + " second" + s(seconds) + " " + suff; + } + + if(milliseconds > 0) + { + return milliseconds + " ms" + " " + suff; + } + + return "Instantly"; + } + + /** + * Time ago ex(4 hours ago) + * + * @return time ago + */ + public String ago() + { + if(days > 0) + { + return days + " day" + s(days) + " ago"; + } + + if(hours > 0) + { + return hours + " hour" + s(hours) + " ago"; + } + + if(minutes > 0) + { + return minutes + " minute" + s(minutes) + " ago"; + } + + if(seconds > 30) + { + return seconds + " second" + s(seconds) + " ago"; + } + + return "Just Now"; + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder(); + + if(days > 0) + { + sb.append(days + " Day(s) "); + } + + if(hours > 0) + { + sb.append(hours + " Hour(s) "); + } + + if(minutes > 0) + { + sb.append(minutes + " Minute(s) "); + } + + if(seconds > 0) + { + sb.append(seconds + " Second(s)"); + } + + return sb.toString().trim(); + } +} \ No newline at end of file diff --git a/src/main/java/phantom/lang/Heaft.java b/src/main/java/phantom/lang/Heaft.java new file mode 100644 index 000000000..9bce02df9 --- /dev/null +++ b/src/main/java/phantom/lang/Heaft.java @@ -0,0 +1,6 @@ +package phantom.lang; + +public enum Heaft +{ + TINY, SMALL, NORMAL, BIG, MASSIVE +} diff --git a/src/main/java/phantom/lang/Priority.java b/src/main/java/phantom/lang/Priority.java new file mode 100644 index 000000000..6e9b47bed --- /dev/null +++ b/src/main/java/phantom/lang/Priority.java @@ -0,0 +1,11 @@ +package phantom.lang; + +public enum Priority +{ + LOWEST, VERY_LOW, LOW, NORMAL, HIGH, VERY_HIGH, HIGHEST; + + public static GList topDown() + { + return new GList().qadd(HIGHEST).qadd(VERY_HIGH).qadd(HIGH).qadd(NORMAL).qadd(LOW).qadd(VERY_LOW).qadd(LOWEST); + } +} diff --git a/src/main/java/phantom/texture/anvil_base.png b/src/main/java/phantom/texture/anvil_base.png new file mode 100644 index 0000000000000000000000000000000000000000..cfc1fc8f10b61b3a1819dff0a3cadc5f856beb92 GIT binary patch literal 379 zcmV->0fhdEP)_db=4Cy@2UxhTl0mV(zyaH0y4kRL1fDsr|?zqdc%)7EIO%3Z3(qbWz(^W-q zaZnV+$AOjzNv}bSb)d00 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/anvil_top_damaged_0.png b/src/main/java/phantom/texture/anvil_top_damaged_0.png new file mode 100644 index 0000000000000000000000000000000000000000..395dea47c64c6cc7d932d6a08c679e4c90f11975 GIT binary patch literal 310 zcmV-60m=S}P)ym>Y426BCwkn|F-EH^%pNI8J8z+CDv(B6W6V4?JRb{@h>rxCMt>c(p`<{M}Bl)J0 z{Su?}2Jcgq`<~k-hXG;=tR|BhiVxg*^L^`5*S6(5 zXzurPEQ^S!BOncRP)vXW&?Jx%o%&v&y{`i5#$g0(4P*t>#lAu%+1l3xAe@g0?DH(J zy{rIEO2A1(>bFpRyUF_R1o|?!X}W}q0$iG=Q1W~BaEV&ZA2zxZnzC_IS^xk507*qo IM6N<$g3ca}kpKVy literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/anvil_top_damaged_1.png b/src/main/java/phantom/texture/anvil_top_damaged_1.png new file mode 100644 index 0000000000000000000000000000000000000000..eddc47fbeb1c7f813905e902b9ac8c13e786fb2c GIT binary patch literal 367 zcmV-#0g(QQP)tDlgbYm1V~SH~{;wjddIZ zwBGN3?4Op9$I+&2n+7f8$O*P-(xmL8grRB99f+D`7(C-!zg|gVH(fs`a4n0IVSiAH z*n6llun&AapT`7XpNBzNAJ{&KPy!sx{Xmnt*3%wzbxplOsydHuKbD16zm;nL8$0bm zqHF^o5R#9}g~~K#NbD^^zjFeD{T^^gAS#Z!Ho@n*a?<`~zIA|R$@2}>)9tE?BnBK3 zKnaHdD8=}Z+Ky+>wt4=S0|18sd6{ilZp5bqzT<2zB>7c)ypis6egNM?6K-43)%XAa N002ovPDHLkV1ip9q(uM# literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/anvil_top_damaged_2.png b/src/main/java/phantom/texture/anvil_top_damaged_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6cade1fab147ebfee9f73b08142325416d324248 GIT binary patch literal 406 zcmV;H0crk;P)+}rLn>}1|L|8#U=X}zZJzMx zGW&*P71Q*4H4a7$-AU(Hryr1*?s$WDM>+30LD}Xf8>AbSSw4Bz`u}JD`vnOTBz7rE zuqkBE`~33lf93!G8x1>plQ`NK1N0kICYr`KC#5(SNHKg?_Ym~?Y`s8+<1kO7B!e-_ zQEnCK23>)Z->UG1CubrqgK=Lp#)urAbj5tTj>#YH+1S)VOp(r|nE#xHPdttJHR^j1Yn! zace@13BU01MgBn7#y2@RZ|*rc=iXeU{?ETKJ1LERJV9?JL7>ghpVsKcQ@qzSdWOL} z-Q7SL>)#_NPwI)z94xBCky7F0t>euq)W> z+~i~9DkJwA`~G#JR+$~Q#Hh7I*Y_BAR(Q550lz-26TU2oX`V@c?kKv?o>yV>Rvz{H z%OgU+%JXV&;(+6Whw|(S{@n%C(eMF>-ZJfaVe%V{H~8#VaM$zv0UZ3!#&7pH8~^|S M07*qoM6N<$f~v0KQ2+n{ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/bed_feet_side.png b/src/main/java/phantom/texture/bed_feet_side.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce06f3efbb6f79aeba81803ea9284cb79ae5cc0 GIT binary patch literal 438 zcmV;n0ZIOeP)CY@*=9 z&n4c9O`@7IscWXVTA1fLm*aBbiExHrxySs>WIciO;J;dLqSz=phChLl^b6RQIWVS+P#fGxaFEQLN%mNzk@9XABwb{JYNrs1kMY- z9hB(2&(pCN8Pt|V7df++Xz%A4xFs%*o-vS|GrNHLd$~==Dd4WmfgzU=;1cg#-J6J8ag6(wqUv&ye01*KdYo|qP>vSEfcB~)#d#5My!=1Mz z@0@$jy+?{=8L_OOry1BY4RmKT#Hx%w&xg8>fu$o>vIu7s#M%28=mvHT2R+?{6e$Wi zygaZieDr-B3$C7@#)$|paRd%b7rR*v6F-8koar1l=|JFBfwX%xuixvE=RB&0X;&$r=?q0mY-PRl2y?z6!LxA_Djf<5U{?<2f z)u`jTL6G_yZZ;bDyS|Cbl@(kpFX4A(5!cmK+^ntQcC(%mNRgVsXE(rAZ55ZbWt`0~ z;1?M$YR~Xvsfs_8Hh$tpe=Ha?Y$7>GQP^VlcykZl}`9GSWI-86$?`Y1X37!?EtNd|F7 z#gS#>OZfrD!7TPzSMt*!=c6kUHlL5J`*H|6v_0&5CJyuBK7&qH#)trCj}~xPoJG&c zq3zpTDHNl}nn!77tU1-?o?x7mMG~p4&R}etm=sFbXNoZe>o`6_GKC!NmhK`lbo5BF zYqJA-qK}8Bt7F@+AhkH>M}~n9r2_h_wNC+K+eVYZHVNEfgxtT=EVNicq+5vTgUHd) z*64-Kw2DDCL(x2@>{3VyL>*eLi?%5c5iF#knwp&gbu9-i$3kS8Xj^F;vvin@=9H4U zE^%9=We~EIF4JytfI`kfBus2)6l_mVp+&-Xau&%5NTH!2q7LapHH){(6jxf9(dAuR r)l!03oC)CtX2nmU&VuvpadaKe<&Nt(Vx@D4}hZX*K70zP-c^bq?jzt1CRdTcWmHWV3pj zJ1Yg&tEXrz&&j*MnmWrZ8LZ3y`uQR^D>J-)u*$RM0=E|nlAv{&-P%0YCTmmb?at~6 z$#r!G#dvvDt}U{*G&}Xche>Cv!iFSP-aNgCw!J{3TAX^|U26qxOQmt)41WPw3Posy S`x;gN0000aVmS~XAM9dt zWS9>ih z!#W2C$LvV9>$(D{$_b12SV@gyXC}mPO0T9^%O$YWaaPS3#nc$KIZk0AM%kKVB^$@i z#wc0$d6Bq@T9_N;*>sfL!vV}$gQpUjNke=KYtA4w+b=dq&kT}I4)AiOpYqZpK4u;; zKP7;6^vQlqIXB7k={5nCjVIXFgft#%v%zYT^}hgvKUJ0Ty?G*#Pyhe`07*qoM6N<$ Ef+cv>8UO$Q literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/bed_head_top.png b/src/main/java/phantom/texture/bed_head_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab10900b96c015421c6c9014dae53fc330d473a GIT binary patch literal 958 zcmV;v13~Aqg2HD;T!1sW@gP z*Qp`l)ZO;}{DFL5J1tWKcSy@TI2FaC3tmAcg=Yh}v8Ybvgsz>x>M2 z_yJc+_EBXpP@a~~7jlHDsX3mkC0JiwBc6z}6bj27V$$oC23rtyMkC+l8feh#nE3c3 z8cT|))@D(bqU2~2Fhy)R&f|ET@KTI$D8j>FT>9X{VZVVmCjn=5dDLmL=zr^NE*9of zBV#-+lzf^Z@XrN^#+QjpKqM+5;RxYqm$Dt~ zv3@QUOixb}UyVrx%S59wBB4h-l4DG`c?z7P)+bAmZ*__JG;%k+Hju-ax+jILd$ym!2YL0Ff3=NGk=bvR} z_AU$e?&6oJxLhu*RwrGZU5IKKpGm8yQmLZzz&CmG*)t(FR-jRLO_c>1mWpKaQ!=q=FQjj+n+a07*qoM6N<$g7)Of-v9sr literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/bedrock.png b/src/main/java/phantom/texture/bedrock.png new file mode 100644 index 0000000000000000000000000000000000000000..1643c9958fa499aa6a57a36efbde0c479e00fe6a GIT binary patch literal 225 zcmV<703QE|P)F#%PL-74aEz1~lKyIiDiVXa7M##mtc# z%Zg3STy?z)`(m#A!{X~9<&Lv_W@UB83}8|6RqkoxpZOmj5{fI&u##0A$Ed6X1#0Hi bBT~ROrseuXuHE=G00000NkvXXu0mjfLQ-Os literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/bookshelf.png b/src/main/java/phantom/texture/bookshelf.png new file mode 100644 index 0000000000000000000000000000000000000000..4c87f0fb5dc5286b5f7a29ca8c78b96d43948345 GIT binary patch literal 375 zcmV--0f_#IP)C{vID^0LU94I0iK?o|LyJV;c_5bVFth~1nFe}IRl>oAg99Q(OrNM2H3m+vKf~F zU>AV=0m7iLK*umSZ1OO12K4v_dkLB*Kp0zEKo$ds0eT!G$2EF7fO!!m9e^ZYag7}6 zAPf>)F`MguXB`JhIsu7;4FEZ--HhXZxdHqCWDQo7cn8G*a V{J?4i(Zv7&002ovPDHLkV1lJ|l$ihk literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/brewing_stand.png b/src/main/java/phantom/texture/brewing_stand.png new file mode 100644 index 0000000000000000000000000000000000000000..60832aabb3fe97483e56dabedc3784ceb9af1029 GIT binary patch literal 321 zcmV-H0lxl;P)zaUL}7YBh|0b+y1 z(AB}gm0ZvNdqNHWuXI=ak8A))^RYdFgbg^ee(C?|=3@UrG_nC8%`h*(48ZDzCr_UI z-z*{V|J=EA1YLjuK$`BFnEcq zx2{4#3`F-A$vNko3y=U21Qb94LX>=}pUxnoS6Fw0J)Rlw4b^JZve~Rt6ukcDsoh6rJX7x3ly4 zEC34n{k}aO4*^hvq`;vg(%FLq3Zc*4^ZB&v_4;GPJxu}{F=@G6>LQ=d>jM20a{u{! z?0&!N-Wj=9p;D=6gMMT{8~vNjM$A08FO^D~4u;|tQUyS)Rx5REwOR^aV=$l;L?RIt zAu*LoeHr)&(MXU?(d+fHZnvv7=X8(7Vgg`IF|`6zdkBYP3 zOQZ`kMjvdP6(hq7@916u&}cNiQ-BgdGPGR+M&SbtDDbf|V*H{zxdAsBm;WH;a#>#< z7c5}NmotBT6cQREUFql#%8|MJ|JUIQ9&zUX0w(?e>90RW_}!_W00000NkvXXu0mjf Dd2;BV literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/brick.png b/src/main/java/phantom/texture/brick.png new file mode 100644 index 0000000000000000000000000000000000000000..fd6959c2f5aca29017e58b72391fa4cef6736a07 GIT binary patch literal 506 zcmVG^nq`+tOt=A8S z*`3)tch1?fMsaGG&c_A_@hN}Fu{<51(=i|2%?5e@5DU}ssFz;LS>8(?Fg62y1f;_K z^mSLEdOXVeRc{w9y4rcY?(d;Q$fX)=k2pBLWq})Hq8?iIbT%DW^L3N_06={=$vlBzSu35a_=SRt2mo;kY8U@e!E4myXY#0;% zfY8w7F?YcqgRa#17O+6_vt}yM=6YK=!XLPM=4`1hbu{J%!Y7~HZt{U$pZ99vS0l?i zqKN_DgD3oM_rhcLf+>No(ubFVRrQZ?xn2D)mH@P2UTGHm z+SV~+8*g13<^=$gz2JV3;K8~l3qH5;)p}$2wt|oZkb_;w=$m#&$fg1fR8-)iL@da? zI|i@>KypbsL2%7JK+ZC0p^e8#07nXhdL#-6FvOw&12BRL0A3ds(V6q^f7e9WLCM7l2bg)0y!B XfI2L;!TGOd00000NkvXXu0mjfhNE-( literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/cactus_side.png b/src/main/java/phantom/texture/cactus_side.png new file mode 100644 index 0000000000000000000000000000000000000000..9c555037f08214f98afe6b15cf741aedd52bfaf9 GIT binary patch literal 430 zcmV;f0a5;mP)wSdi{B9flF*3=|#Kb2(gR}W2BKazU^5`t$kCOD;5Es>5A0qW> zhY}#5?}ree{Z#@;RI?l+>LEvBeAY9yT^$JU3*w`$;d@Y6+o_r6MJ582M3-C@Q$I-M z1r+KrUv7aeg2O!Qlf{`27CTbj};sf#q z?Gb&fRR)yAZ~%)0PE+wg>ve3}e_P@a77rMRfSWhZngy6q*<`^KnwNb%RRrw6Ks??M z0X7?-c_-dvsDu_Aae;W1K^Wt-?Ug3vAxdRuW%hgdO#HCQiELpR)%CzbbPiRw-e@fF Y4?x9ciJ$ruSO5S307*qoM6N<$f(p^Lk^lez literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/cactus_top.png b/src/main/java/phantom/texture/cactus_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f182e84a7bb4d1c3f7a51e9302fc3aa3fcd7439a GIT binary patch literal 321 zcmV-H0lxl;P)9U5bVK&AZlZK5T!n<2Y<*9@aPYC5)niYL=f?R*UXxYnV-UNg4^4fYepArA<^%;5JI z3=qIr$B4CN9uPp5FauEBmmCbXm9+xNBMZ$cupoBKdB#6-5j#RHaDjs1VM@ib_SLi^ zfQ3*Zc?PJ&7GA4Zx;h)oU6+&v2h00000NkvXXu0mjfG`WWN literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/cake_bottom.png b/src/main/java/phantom/texture/cake_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..d93b15ad34d3d6fe631fc5addace60289042a4b8 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`;hrvzAr-fh6Be*V$gTM>U#2JN zKwrey{{~X>ZeiVt47(I}+^FC^kg9A}IB9RgJEb{#3da;~RWRC4@%+SO80axg{6wEy sOx(fQ6Fht;vg~yT@>-%{9LU5_eRQ>o_$1bqKr0wLUHx3vIVCg!0Acbl4FCWD literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/cake_inner.png b/src/main/java/phantom/texture/cake_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..ce7ce6904b40694b4486a4e34583b90b4e7f318a GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar-fh6C_v{GjQ?AT7CKd z@9%Gk9bTOe>vvhOEI!@%%+s86MAglJha+(YBg5<2=WG|-ulNqM Om%-E3&t;ucLK6VlpF8^i literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/cake_side.png b/src/main/java/phantom/texture/cake_side.png new file mode 100644 index 0000000000000000000000000000000000000000..343a0234f9abfe0e053163e6ffa5ffbb5bfb29e2 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`iJmTwAr-fh6C_v{GjQ?AT7CKd z@9%Gw#0hdD%yD~be1(o>F?6);Y!i?_%pedaw}#=^kxviVe7;X<@?O^;(6;&GN5`rF z9tO`h9ii;W0<%HNW~dmk-E8sZIm}RG;Gxg3daL0}4#x+NfR-_My85}Sb4q9e02NF# A?*IS* literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/cake_top.png b/src/main/java/phantom/texture/cake_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2947892e8b7d92afc59de48b2e7ee82a30b73640 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`eV#6kAr-gQPQJ@|K!K+v_K4w~ z`YxN_x8^HGDY=~cvPDdrBo)az+x&($tIHDKGI_$q`s;@`}$YrGW;*72$@(mM}y8H1;*pUXO@geCyG>`yuX literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/carrots_stage_0.png b/src/main/java/phantom/texture/carrots_stage_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ef732040074d2e35033fa265cf5933169ec0df GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`#-1*YAr-fh6C_v{Cx~2Nd?WDR zf6pU#rWsw=lMEk7=sADy_?vz}Md=xy~0{%OFvQS*ozo7sZd z;-N|HKk9cZwD{YXW33@@@n~5`vQz=j$%K>xv(EmSpDD(_$~U{Q>tZaM3BwYx)!Y+Q l9g-64cD;3Ao*2u(5OOTJgkgQfTA*tfJYD@<);T3K0RUipLb(6{ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/carrots_stage_3.png b/src/main/java/phantom/texture/carrots_stage_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2391be83797f792525c87c18e0ef4b8424514d2b GIT binary patch literal 306 zcmV-20nPr2P)6uGD;c#i)?{lkPuThnn6%Qz+yl) zLNn9=kOW9G?<$7>Ak7SoP{oZzhtLeCYmoT3fTJ(Zf5&*f|E$@pU|Y4U1;7|A3Dm3{Dg0l>nI9~V zp*h=5;Qylq0{<^f;`r~VDDfZ0KiJBE!ar0G;luO+0Ccdi@=63xr2qf`07*qoM6N<$ Eg7VCI%>V!Z literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/cauldron_bottom.png b/src/main/java/phantom/texture/cauldron_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..8328307adbcac4b66c016b06eba1837c0988e164 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0gN_s>q|KvjvJE{-7<{%VEL@@_y6Z0rPzzdmI}RC%j~r2OjS|Gi6bjk zomFrV-`B2DF21ANos0AQrkyV@tCU_^e$w;#^WXxR>~}AwRs^_nhZROQ9NsWNK(_q! ggn(VC9yem=ieH>ozdAK<2FP~|p00i_>zopr0C@IPe*gdg literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/cauldron_inner.png b/src/main/java/phantom/texture/cauldron_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a30dd27f7c343ba13f24a70b6667b523b083be GIT binary patch literal 364 zcmV-y0h9iTP)r4v9tc8tJ7*b)R*ufZ5T$jPy2*}^XZfxieaF@?bW@_@{ICBWx4 z7{TqO8jO=9W(9D4L^k9mRAv!Utp{496W8e)A+X>-B_d@`fVDE+wGysnEJ-p^5?|L! z>O+Ho%_-@SG8e?*C=%2PwKEF&9e*PqR=2hDJj?G|OTGT(CHVugIi|uDWS&(30000< KMNUMnLSTY`VWeRI literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/cauldron_side.png b/src/main/java/phantom/texture/cauldron_side.png new file mode 100644 index 0000000000000000000000000000000000000000..df42f989ffc7d986eccc954a2a83a712291eb32e GIT binary patch literal 534 zcmV+x0_pvUP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qRNAp5A0004nNkl~_1j-EMKYT;lnB#^dpb_xl~6&!_Br zw;m3Mpqor4QTbb~R;5V@Km!0z&1SRMY&L~#QxUvguOcQ? z36YZ7bUKZGzaN!{!C+7z*Xy;Attt~)&*yXLahG_pSVXVa`vDLmE6ysNBqP@IJfF`? z-&z1-fS_^^RSM_LcQEl8nFVln!{IP06f}{t3=oM6l7JL0m&+KB$I=@z~K(pB_m!S#5-7|;;VrMc2X6*ZN zjYcCXf1OU}H$_GSFqmfs%f9os+wG|9`UjBrkOBoLrsAe&hKW_`lE4upFkmq|Kx275T^vI!{HIP1&pTqk<5H^oohy9j?|jyS6<$w=H+qvtA(;Po>mIuUX3`J>R)*v(Ds2 z8cTAczivL3|Gezkp6@}Sp&OW(-u~9(W0$^AYvNJC{7;iX{{QNQEI$`G^HnzX|G(NH z<9cyF(~}mB7r*1Ud9@ftc@-BJm#~C1S@bn?cuYS&tL%E|ET$hn;(NadhTJ~EzxVoC zcV}JA6B-N4UL2B$-C+n!;*)phjuA<_di#Q)7D@XB`1rye>OPs%H z(dCDj@h^)^zyQnIK~!QdmhDA${f(P}4Sc}{flFWkkgOVI;TM)gO`vvv6SWF!@so}e zL3JIq5?fZAxP8!ttVs^!VU4f1N=2phi3vcTz6f2oikYqa7P^XH;m5tat}_-{`lTow z#;n{}o&T7awP%4hkv>sQWiFKRYm+-xmK_)XNX=G>#MvOLZA;DGN=s56D9O=xo`8)x z{UH#TurtZKC?FvLo784OP(fR1-SO&t2^ZpQevA3I zvz@38!^8Bz928S?tK)~~OIn=C01@dU!I+e}RwBx7*^=Y<9L}3b%gw3-1 zd<+pf;n@y>kpnZ_2YnPoJK={i=R4iRM83=eCQVi9?#c^|xiSafX?1vXZ5#FOEuf#% zON*=@+vxiZSQam@0WZ#$$>Sns2Dt!Nppn`c$00gm#yckyj|OJKC>S|0n;sgzkoO;W W)AHG2&FB^Y00005Oes%&T!BI#JY5_^EKcVJ zZ(P@6z+=p@O7E@Pv48)!8!9ea!JS`uj`e=&%8aDz8&4O>9B=;r^xcWo*QB1W`PlRO z*s~z6s`mxuXDk;k*%~%O^4w>h0!>!$?6-^z#?_6XzVBrj44${_WyCC1t6hli9lOeZTi5`(>^u9-dTw^aoT*A7513OI` z-|P@-W9PbdW@U$5YSZ+lm<9Y^%ibs7{Qmc165D38V;#3YO8_mr_+!(goE)t06V|uQyPTuIG6UEHt60l+tr}2kZoBNb+$UOZmeHE_a93cp?h#2CnPs?8KGm zF#(l9H!swT0`djklLBYn$@e8^#o?R9b5B6k&gS@H#s!dPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qRNAp5A0006JNkl#Gy3bc_gi>w!eHm@v-Ub` zKh8Pc-&Y;`++VbhTbFHbWnKo>$W9CITskEzHGV{EA$eT!+trj-4-jHAGimpi&WSYI zC|Ix8v$cHUkRbl|!LsSb1hlM5oG{jR>yKon_zP5p%5|NF|y9fU_V7>`8M@2Z&+#?>5W!`$gNf zuchNewC3Haq_lyEBH){wMSEB~ui-&%MMK+PUx=%~T*cn=?nQgr%vd8c6%Xq{-Pg*k zY?P8VZ0AJ|%QLY6t&t#p2j$e50)S+M;K^AMs%XL)?Pc67IUC%#ti}M{P)N)G@VZQ44>2Kr1SYq5@WSmNv+pwt_HxbB@zh^G?`3fx7!)B*=%%2 zNRY{7NWI^0s#dF%&*$m&dNFCw=aT`F===TBe!u5H=?GlmpDL9~eDVAJwA<~d)oL*x zU|w2As zy3CzSCV5U_9{+;DpbiFK3bVqAFTeNzyLZLurvsovFYFH`|sW%Z4VIQzvE|-fJ z3hN5V?)N)alLR<-IvqAv0oCv@uEhD z*UN$T{d+c?;cqk={OxwTB>QDbr_(eZk4dOs4FF8?N>(sP9T^Atd_Iz1O4M$*4UEsg zz^c_M3GGoM`GZW-8{^0EcqA>VS*-*D0rn#>7!2}xyCF^CrS7Ie$B8KA$rN2^pWVQz#VrPk{Vo0SU$>n)v!WIC~X5DbSyYd-aQ-6%a| zsB<(L89FdU;i|iM6RA{+fe3_b`~AKpAk4(waa%$H&XO_!&rSQGaiIKO<~uOc>6EL1 z-y{)GUOt~E+oO%urT@`szu#LKKy6RrwD+wMYru SlZo{J0000Gc0AmIwW> zue6330Mgtw(eZz2z43oyH7}YU08tBbI*3kB(I#lXmhI7C&9&v0M0*zwigJzqw|3e5 zuP!(LpPj5vx&al{rvJC^jRt#p;xsqX4FGv{+n%WZ3zvKUZ|Sfh-GG`}^Z%Q+NB*BQ y)A@gSsVV6ORF;`TVynXBe_o~m=?08~!3qG-%5CKAc1DK)0000`|IaQ7{l9Bk(Eo+?&i}K*W&RV=oF1Y9Q3J9K zWb4K*S1<;#LEgY+Kz4){ShK$))RGi0mH*4?ZT=sc2*I<;EHDfJg%ikC)d`0G3!_#4 z$J;7`G28_poa3kRKiokQOoKEa8vxRLc0us}Q;TB$PpxqLzq8Nzf4rwO!GMN?BpkswR!yC(d+cz$3%#D10pP? z{+GvV|4;By_@5J^_CM58@_&St4Dkkx0{j2~h%&!_(J>jM00000NkvXXu0mjfcb3ZK literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/cocoa_stage_2.png b/src/main/java/phantom/texture/cocoa_stage_2.png new file mode 100644 index 0000000000000000000000000000000000000000..db28c7b8ea543c5ce6af85eda16cdaea1f5f5676 GIT binary patch literal 570 zcmV-A0>%A_P)m0YWG_Y((WnKk&l9 zFeHjDf<#KxqKmwVc2>K{%j%+kj9O_R<8uR;T&$Xb`2)&1}T9D`2$O zrkT5)I|B+~Bg%}I&1>B#4-&jhpJeT_L^7b}U{dorB9L?mq&n2&Q?okVNU_VnxMSyu z)m0Y;tgKD7YM@fi&BA#*$xcBtZ>V>2NaSPIOYV$?Oi*Nf$i|%4_y>@%>q&alDLn!+ zQ49I7iDJN@wGg-JQ8E&*C*1saHqM7!4^KxA^Jc_BN)q;LNz;gPKc%djci9epKEK5F ze2iB~iPF`h#O?ap0NF3{NtRfha`An6jBgM7d3mvg&*@ezmzscTz*WFXN}_TvNac2r zCqoXD2`4c}LmdD$@hx@T7h^4aoeQy<@vwBk$;PmqsA*qqK>E0-1(uJR*}CCl>!wd@ zWOJa2{>C~0!%cebbQ;KXi7cNxL^>d9|K{w$2BKmefd50k0sM6cONliA#{d8T07*qo IM6N<$f-IsFKmY&$ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/command_block.png b/src/main/java/phantom/texture/command_block.png new file mode 100644 index 0000000000000000000000000000000000000000..4459675f477cf5e28b25983315889e52fb3a6c00 GIT binary patch literal 349 zcmV-j0iyniP)$!3vgG#OLKM8U zDG{s)T^xi#>d#Co`Ok2&Hw|tBNaF7GOaE_OIS00KivL_t(I%WadvYZE~f#(&xFPA06w zG%4v}CBYWOP!Iw^#G^v+EMEObyom?BLbnOi36pG-cnDd$ z*mrs}y!qbuzVA)t@bGXoo6Wc%)oPV63;`I8MnqABwU&qKe1J};gOrkoqF%3~lq$~G z*VhGj9LH+_Yb|-612CV@5keFXlu{UD2!a5BFbt7W;+*@(U}t9s=Nte*5MZq>6$U|2 zGyqDuze%K&7-IksLXf6uX_R)m{oi<#$pn8kn-vr{G}AO?JRUQhP64RZYV>+Nk|ZgO zsJ<*^S=KIfRmqTA@WAh!C(M@r?sZhXb{ISd7hJ|DOr~B=H+v= zZXg3e_vtRf;gD9Vg)xS~V1U*dtu0 zZf@3&1Ol}iVbT#b-N63&UAVKcI!O{PFE8;YlL-JGdcBT!2jY>$ji)?&@f?7&von-ZYY{hyK@eb!K?s3T3Z)dyX0u=>TaqM6 zaL$qEIeDIAtzB00LM^L_t(I%WacSYg0iK#eYdNlPS;P zH3{t^kU*=_SSdt;h)adwTBMtP84E7@5nPGlLJ&881nDXZ7j4D#N%{x+px`TgO_)rW z!0qDboj9Ym6}nApr0^52X~&xxWlbr4r6L0E7@& zYiA0D5NQKoCeKY1r4+^(0Hl;eQ8Y73wOajeyk4(IZa5sK6sI(!D5Bf#G8ha1n4h1g z(P$8c;moMM?~`-RaddPI}Ps|7&T_kD`RB0&(4BneRz z5yvsl9pi;F2URZ)ath;xo4Nl20eYwctcgCIx?opY4SWv&MadwYB7y_9n1 eJLmIx0R8~oiw`oARy1t@0000Aop!n zzQwcdG-`8h_;l)SHkMqsvEcXEzTf)>+|BXBVfc3K z2ECSFL4Bp*F9Y@vW7nD?Q1+MZRtQ?JmP}?P$y9KEx$SYXSMwkUEY41Ous_--Ur9StCm9w63$GoJ{K+tu+E;N*hl!Oz5RTl77)0)jEdPCcVqkWPHW7!AY@M8Jh| zDQ|`dD2aIm`qSGVHkUoH%}h@O4TQBy(Gw7p(co)v5T=qfu0Y^9`7#>7E`rfPQu!jG z|I8fxH;M9Vz|4Ok?(w<5A7+3(0kI$ZS*LF1s{Y>J3qjkPji|DUBpp26>>JLHTLyx_>f(%n_1VEjhy(aS zf^v0LpmjRXo~H<+1Z-|K>$ZVa0%+j-emn{q2$2SWgD-<#uq2RxP@8xQR2R2A&%@el zz`xfa(m)wGOl9oD^{(-^nQ*)-I}oQV%j_Wb`S#HGi-L6WR~`~nRUn|*s7FKO#f)x2 zoV*rbZgwhYAb1@T4Sq+bp*q%gAkcxRBy*qy0@?kEP)XDIWu$Se6xK=XRRqGh`y|Zgl;vIu`NU!Q){eX9VbKwss;H4D@lj z#FcOb$b7dIrg*o5CY!C4=uxD=9`{;UkNX{b0t9c6Tvx3xrI+0yx=Ho(WoEI1vMZf5 z(`A=s0|5S9Iw}F+=L&!V<2u#Hm(UR~;4#r@qLuZD_If&sH8TjRKx=;h5SZ{QG}CRT z@wPhFAyX~23=EL5CJVPID&Q6vV1I<2^8rr*?6(>SfU=t*-iWq^I&fg4!Otf%3=m1ttOjB0dv_ij_gcCLT9`%0`Tcms`NM o)PB{N+eA?{3r?+wFRlIN-zVDKhlDB9a{vGU07*qoM6N<$f_q~6J^%m! literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/daylight_detector_inverted_top.png b/src/main/java/phantom/texture/daylight_detector_inverted_top.png new file mode 100644 index 0000000000000000000000000000000000000000..194a30e4b4414dfc138b7249a29f0e89dca21290 GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDMfiPqHot61OLG}_)Usv{f>~b7>{KaeY+<-#!JzX3_EKVnH zF%0{4-hnY8F(D!0hi1Y#0WrCQ2M(V;Y>4H1@Z5FWj|iN~4IO8XFME#mRvvwmiKuw#2$TwxA<3B!J-A*_q7ZI$HS&3a&jD zk43z+Hy5{#Wc=~@i(8s1^BcOTm97E@-3TuI_ S?z%vyGI+ZBxvXI`{J|=`b`5;D|^#*EsXX_xts1K}RAafMDL9e=SL`-rLuA v2t9t1&@SQN)6mQIC_~|qaPkrpYi5S4cW*_Xej#fIw3)%v)z4*}Q$iB}hn!8y literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/daylight_detector_top.png b/src/main/java/phantom/texture/daylight_detector_top.png new file mode 100644 index 0000000000000000000000000000000000000000..3bfb2da31b47b409591c00edd50357e656485074 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DkBK$x-p&dPkC;CoLO#}JFt$y*G=ew}w3sUE)P(;7NIa(O3qEL@%3Wcl=UdpM8%{@S!3 zpPmZesocM>KJCZPx5izQFJ3h~?a66&XLr>s$LQeZhlhV(=Q%xHFYU*Vzx;>Kavy(~ z#QpsIL4oLfC5DG*``b%Os6{=Y3ON`{PWrULu_9+B^G3OdCD#1+gF zS>qLil-)uU9tlY=X_SzZJ?)^8uyL6S8yj2GO1^xBRhp-gcsJPZuNU&`oRX5x&?d}u U>o{AJBGBs$p00i_>zopr06vk2%K!iX literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/deadbush.png b/src/main/java/phantom/texture/deadbush.png new file mode 100644 index 0000000000000000000000000000000000000000..c64e0797b20e80d2b3691d3e412ec58bb8219539 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%``JOJ0Ar-fh6BHPhEy?(kzJMhl zg~6kE3+L_nO}s}^8Foo@schmku=8N%SbRE})u8o7+X88qDT*gd&fK(^+kakQk?F%C zvrP+GOck<^96KgG!QlC!94CI86jKXc$LR+|`CKF$WG1AjKW#K^kkDsfSi5A_yS&WG QGN9EAp00i_>zopr0RO2t-~a#s literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/destroy_stage_0.png b/src/main/java/phantom/texture/destroy_stage_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f65b7ede8059cd0ea3556dfd227dae3cc94e56e6 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`x}GkMAr-fhfBgS%udF&F@k+zN zyoR-F-`02W%&@KgR`1j%@P+Bbgo_z6Z-Ba9wf{B_xVJwAsFA_b)z4*}Q$iB}0Tm-_ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/destroy_stage_1.png b/src/main/java/phantom/texture/destroy_stage_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7c91596175f6affa76e89d8bc8ae68d47f2001b5 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`R-P`7Ar-fhfBgS%udF&F@e0Eo zwi~x@{gaPiPCGyEuY4MZ-Qf>yjAsM{e9IJsK5;oRf4FHkOK4>Z1H%#KuiH-^y1pN1 O3WKMspUXO@geCyTuqXQf literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/destroy_stage_2.png b/src/main/java/phantom/texture/destroy_stage_2.png new file mode 100644 index 0000000000000000000000000000000000000000..dadd6b058a05db7434c5d13d08c3ef4abceac0e5 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`PM$7~Ar-fhfBgS%udF&FQ9?Q) zJNtKifh5DDWMh%#jGNQXw`DV2RIuZiEYe}%ydhJ?N{pkGHJ4Z6NzI}|2`o=o8Frb! VI~r`&e;Q~SgQu&X%Q~loCICB*CZ_-Z literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/destroy_stage_3.png b/src/main/java/phantom/texture/destroy_stage_3.png new file mode 100644 index 0000000000000000000000000000000000000000..52a40b65980cf4cea4fd17104503619b2513d833 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`5uPrNAr-fhfBgS%udF&Fu|PT@ zJNx(i9A<}E>F4M9&SY%4VZqCw=@iCM#OcFxH#7psY07l^#%HGgkk@5~;*Ud32_`~a qoVO$!v@dj+F@!JR-MGhrhmFC_?s<7>TdpP04hBzGKbLh*2~7Y1KrPt- literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/destroy_stage_4.png b/src/main/java/phantom/texture/destroy_stage_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e37c88a2c56df860a774d2bc3609cbe1913d7355 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`NuDl_Ar-gw20L;cFyJZTKkfbb zMvoi|=RzL$YK|>IM`wtHe*L2gTe~DWM4f D1ba1K literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/destroy_stage_5.png b/src/main/java/phantom/texture/destroy_stage_5.png new file mode 100644 index 0000000000000000000000000000000000000000..9590d2f78d6f257ac786dde8067787e753458641 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`1)eUBAr-f_PLAesP~>pQOy%i3oYdGjFtIDvwNM5=mnXoO))-^SvBwdsv?A zyXY4Zx=rAv#;QDBMp0X-ohB1yXZ23-Ym}^DNm!=Kc;-YdgYl=A#<8|f@4hg8d`Wz7 S2~!BrZU#?RKbLh*2~7Yg5Is%+ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/destroy_stage_6.png b/src/main/java/phantom/texture/destroy_stage_6.png new file mode 100644 index 0000000000000000000000000000000000000000..8e490c0e5079826285c32aa39b2d942274086047 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Rh}-6Ar-flPWI+H;K1Sh_Mpwm z_N_Yvnp`%P8g_iHob{k%xBYb0oZ!&EEC$B@9!EGe?m9Xt9gAY#P-M48HX&TOp)zRq zqJ~x0PZPpJm@ciJI3t*0@#2Xy`y0+}xGIw{HS5-MO9$opvy8??tTTGvEb-WTr?*ty db>01+tW4{URMD(EJ~0NIn(0vy>&?Hy zDMB>cH{@+dz&q*5lh@q}Op6Lv>rIIkauAptBD!63h4-ocr_PHeUhUt;YHB34Qtk@t oi(^MNFYOGu6T0P(PyRLaEp6+{S^rjM03F2O>FVdQ&MBb@0FEk1A^-pY literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/destroy_stage_8.png b/src/main/java/phantom/texture/destroy_stage_8.png new file mode 100644 index 0000000000000000000000000000000000000000..c0bf1decebbe2ee1c91984ea7b08cd733158ab92 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vpiiKLn?0dPD literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/destroy_stage_9.png b/src/main/java/phantom/texture/destroy_stage_9.png new file mode 100644 index 0000000000000000000000000000000000000000..e3185f82f2982b4a12e6519b4d61e44dd8441a44 GIT binary patch literal 218 zcmV<0044v4P)J(R>Hq)$ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/diamond_block.png b/src/main/java/phantom/texture/diamond_block.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e2e771a6498eb87678fd201c2027a4b7eb7c01 GIT binary patch literal 469 zcmV;`0V@89P)mh0kz@<(`-8wB80g(5;djiC8fmLGwWL^a|J-szEwyoD|xzj&l3+>c|;@Gq<{|n?ja&k z$E0)Dn};z@KHfScGc|dsIKcfKBYGt^a80?@s4hj-{dA^qPhY_6a4y*ChD7+fb zqwe?>=sp3KK{Zd*i~{rp?1_PQ-qH6ZXU5^1MRN~;)lTL(>x>E@FLgR3?!Z-nzIXMp z!!HXqZhI1prX`-~ucVba(;@lHSry+wX7*Rc)hNR$uQXpRD>uOR13oyM5D0-qt^fc4 M07*qoM6N<$f^{iwX8-^I literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/dirt.png b/src/main/java/phantom/texture/dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..617d353e0d67a14a2952b2a98375eb8a50b97d79 GIT binary patch literal 266 zcmV+l0rmcgP)7w`V=NDEI+d2EruJ8Nt`?O29*Y((K z=DVK`tGLh7MTtz%ds&v@Ga&DZ$;xQ1!Z)iihj}Hm*4l8eo1~Im3;+ie&}VWdpbDk0 z+*Vd{tJH?~A!2frcub(;r0KIVImhR2X8sP4PM&T#KQlJngXEsPNu_c;# zj2A0tbfmyB_f1S^g6x^QT2YWaZ|9A0rZL;l$|NdG{#j@PkULPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2nPxjG9*3KDgXcic1c7*R5;6B zkxNe#VHAd+nJE^bmuaDyav5wP#)OCv8jZI`!osj2xN&1#u=f|ZW8)w3FOZnHFloZp zkU}&BwC!k>nNivqnzmqJ=5x`^gmP9V-+9mXp648CXNLIjv&X60rdb;y76Ey+FiR>9nUutIM&ZQqF&jRKsDuPWha?V9JOJK* zIj7O}>0QET6nefu-uYT(Jf_g-LRS*F7a)Kk1$sbnEQg&(K`5D zkQE=yQ;!!fK1zKDtH$6jsOlCAQPfr4gevC%p;zICTd&GQJL3y+BbnAv3#S?<^ zZwoE0@Zio}J|7)noeBb8rnsVMqbY%37wvMIX9ha_Xev^wV)mV+k*`xTS;=rB(Ej8^BIR_7dDQvr~Jq*Sg_ zF`FR*fMGe*ZI|L=9$=uhvsa^TyZs&Ln##^zZJ-#iUvIpQA_s+BHpR-)Y>2YCRzTNO z49f}M4a=coHmR6R63gqcUpw;0b}#K4bazB&BkdWNesDwm_tPjMF|tmL&Eo zCbzOF{(j%bupFefFCPoTawsn5!_5NBO{BSco$C>x$UxW(P(A5Uw_Pe`GyE*TFf1o* z4p8Larh#b4>xSFk*{iX#G|T2%fl|2|UgPRyks#SzD-5_MmePx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2nP!$928mRqW}N`$w@>(R5;5$ zkxg$KWfX;<`@Un(c*c%nH;HSMDh&Y@7mE4;>?#llx+n>0Z*byC~4V~;&w?`1I&cXJn4=UkoV$nE#mHS~pXp_mIX(}NlaXeN+C zScRKg9soc8lam(EYgvBl7j$c2LSN`a1~u@0>oU>C97(}sN?3(2t_R#d$a!#>GfR|S z%d$Hv@I7Ugf@z1s&LAf(l!ph0Ob`w}UhOm8HkXx81iaf26q!3j3f6TM7vg8S$Y*eYF%2)5y_`P3{ z0K-H%StzHO;)#&tf>#BX!`HvgxwK+20H5}JzS~}4t?Xn0hHpsfihV@Xoc)30#_bwqRcV{ zpdAUu2vUU{*jTcdMFD#+m914nB~#WS!-dFT66Mcl1z32i9E{ z(P@GC@W!jO8nD_D)>kbrMvkL_W62i;@GHXKFUoA+?kpI@jx>kJhtw(Nr$6>ssapmy z#G<^+K!J)aY2V!P*j%;jP72yh!z2Mc4zZmXE(T*A9G%fqz!;^|FxYD zQLGi_*;xyB-VV6hwS?<)^xTX_9Y#5vUlCTC0tNhd|0&f%XjowwEB%oJK)%2Gn*Okx z-~@(FQ3Kt&#Zwr~99gD#1*8tDrrgW5GEh4d{sRKUK0Lhf&cOfx002ovPDHLkV1o7! BZjb-~ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/dispenser_front_horizontal.png b/src/main/java/phantom/texture/dispenser_front_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..3e09fde0b2738221425ba954ea720e58dc5dc927 GIT binary patch literal 495 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 Af&c&j literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/door_birch_upper.png b/src/main/java/phantom/texture/door_birch_upper.png new file mode 100644 index 0000000000000000000000000000000000000000..1345b41ddb01158f4eec7e6f51910fc0e9661701 GIT binary patch literal 707 zcmV;!0zCbRP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;9S!r^WyP0yIfPK~y+TMUvZ2Q&A9x`xajM20nsUzJ!N> zrM~8aLojWe;Bvu;&n@|ge~)B zDp>Qed%BA)-L~|nNn44I>5OsrVCv#AAn|!tncUKAt-0@W+GCa6D`hNa=4DH7ZwL?x zk64JuAK%>+pub!5tt#toty`rOlkNU0%XhHn+F{?b$M>%Y@bK;>3!OQ2LJFvlM|(R% z15jOy`+#r%0X5t2I)V^LnNo26^vM9wa8tget>vY)uUC`i`o?~vk+rs$(VoE7GmDDCW-CSqsrD6woAO^0?E=2f+aGxBTq* zxSt7+ss~b#_&O^9N}BbwwSB25AduR7+ZFZ1bCUjjMtAfe_=Q5^g#dgN^xylQ{b&~i z*#22kGf_Zq@S*BSoLiLW-&1=q2LKpT0Mv?H>O>7^6wo{Xe-E1S17Oqx1<)ALqo$D& zxjUO{DgyxD2!Im#1(F5;4yC46hGtwGmhJs({Zk3f0 p06_!;VoyJYzu+h{6Fd_hwSNXMUe~ag*rfmf002ovPDHLkV1hanHueAj literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/door_dark_oak_lower.png b/src/main/java/phantom/texture/door_dark_oak_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb3ff2a281040d9d360c1d43b37f1aa8025a4cd GIT binary patch literal 639 zcmV-_0)YLAP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;9S!r^WyP0q{vgK~y+TP19>q6HyQa;8_5WNFG>I zNd}0ODg{YM42r)jAE3C2tkYe%lS_X$8OtA2J=1;e>C>n06sy%LeLmSsi?WmEgHHMo z@#CnQ7V$1#_1lqeXUyL}MY^f>(x3Y~r zZ=N^P_f1~?KH~YSR+{!&Yl2_%GIvT$G&?=qNte-J^ehPO zW@`dnGeJnC==89WrA}Tv%H54(jODPC&Z35(qTuW0AOjJJ2o!<5lZt%SYiAPPjE@>w zQMtdJil0|yX1HY1?-8|oQd{gt~qMsvTO^gNCd$N@Z@+5iSfGq%2G2b#g&=CPY z5Udq6bF;zIQ1Cy2s1pSUcmrq){4oL#Yz8iSP!j;1AMgH?%0%-cfI*-;g|+~PsIXfF ztCFZqWRyq+0_%fAINA??Hg}|$OeX1l0Bxf>Xk>Gy;Wz?OX9S4rk(dXU?}4j~z!pRR z2d&Y(B)fgJq3X;-P%_aPNk!lQ0C_y{4rsi*(jb5}0^c%$qU0m}ix4CSEzYeR*p}TG#DqK}LrpY-V-;eL($6Ha~ ZP7kXCgtm4^%a8y7002ovPDHLkV1fnQ72W^< literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/door_dark_oak_upper.png b/src/main/java/phantom/texture/door_dark_oak_upper.png new file mode 100644 index 0000000000000000000000000000000000000000..27fa6cc5760f80836c3952aff0ed9dc720bbd88c GIT binary patch literal 626 zcmV-&0*(ENP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;9S!r^WyP0pm$TK~y+TRg+sXLqQOR=arI#L{J1#gviNF zR0@eooQP{tD3r@4vKmXU7`yOd9j(94X_tqoIn&+q^*`Nx!t0;Ky zob9`7(-u=(PD^OF+hzoS5*B9wCn~vD{sjPI{R50fBXc5=%fkfFDo$JQ-o}i<`wHr* zbW{NU0X+628R#Xd4S=j;1sOZ@q(}7uBhCOTX?t#EF*OF@1i(cu;j9(X_U&*7ut!TN zi&@K0O1RSg536~T34mqt6o486sR282`0I&+LUuv|ZSyX80B7Fm^WdHG1P&-IOi5q@ z$z+An_ac+vmR6dbL8A8#pvZKAvlTJkEm;tN4wI(==SrswR)Yk9I-Uju0B3faL=R$c z01&jJU9iF>K9|p`Yi3$%fSc~NjV(cB^eh05l2N8pewlMrNSV(7{8cs}nw>W_v_M?u z+b{4_5zMow4FHmHwowLvAy&EUT=ZIa9RSH!kk5}G?{C3kTE&cf1ES%La3f$3J^%m! M07*qoM6N<$g6v-mT>t<8 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/door_iron_lower.png b/src/main/java/phantom/texture/door_iron_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..dbc33ab4758bb844515f5c51a82167ebce91ead2 GIT binary patch literal 551 zcmV+?0@(eDP)&5w#a=LRy%8E*5)Xe%Z1HmgXwgN z^?EJ&ZnqO$uUE`wGs(Bxt;|=e6^_Rv=JPpPtrpb%e#hZ(!0+#`3~slZ;P3BG2=@EE z#Pj)#)9EBc6d8?1s8*{`kHwnU8*b=3yHj!kye=x1_L3Zs#d2X_CG&Ap)Qxp z^Cm9o8#TB@yZwG2y+oiBrEHIf& pFq_TKnz;sNZ*Olf8jS+x{{UWX>N3JF*7g7Z002ovPDHLkV1ik70)PMj literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/door_iron_upper.png b/src/main/java/phantom/texture/door_iron_upper.png new file mode 100644 index 0000000000000000000000000000000000000000..56878feab13f88e03602494ed2522e01d9244c9c GIT binary patch literal 449 zcmV;y0Y3hTP)?8Had_r zO?5zv#o`OLk|c=&n*lv>Is-D18A@#};M~*~MWLoWKgfYCfNf@B8AQkCA}7t`$_a6FZbi&ZeNw z<74eQL|VXr(*6sB%?6fiiK?^NOl8pT_y1>rll>_6Ca8)Y9cv?qLhK)OyWPL1%&OQs rMoy~4ajY_q$kXXmPxGOAuh)|gU{scUQ_%6w00000NkvXXu0mjfEFjV# literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/door_jungle_lower.png b/src/main/java/phantom/texture/door_jungle_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..4edfa3caefa6d361358a6c0e24ba10d48205de14 GIT binary patch literal 472 zcmV;}0Vn>6P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;9S!r^WyP0ZB+_gC18+8sg=iOnGd z1@Ws85fv0{4z&=%SsVxo7J^=(l{RTCt`*^m0~}*Pw4? z0npFqo&mO(=BzSW1K^NTp#H^v1;FNs00J=}?mz$?(Ex+TYXhK70PaAW%9p&cIP2Z- zurLRv7T+JvY5+`kM9%4YGCsmnXT_`uu$oL);sV$m$e|9frVhvx01JRoac2M}kQ@Vu z3obx+x9we;j-3MNlF9)7Lb-sx13;s!3IO;n|AoEfd8;Y_8UW={CeYM@MpPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;9S!r^WyP0YXVcK~y+Tm69<_!%z@_^EaG@4kBa-DToNc zp)|!oilCs2SR`ABgE(~PP+A;xb18^JSC}b4efg}U)8v+;>6Gzu=e~~Hxi0G|15daPg^oN9P3D$SxCKBK$GyyEh zZ0?mkXao2yWLYL@no1N!`lbL@8G|HCu)RQh0Exc;GTD<~KFjPHxZ>6{00000NkvXX Hu0mjfB?G!M literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/door_spruce_lower.png b/src/main/java/phantom/texture/door_spruce_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..5faa6e740bfcc8190874f363be6df5b222036e10 GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJ)_?bmmdQfD&*_N-=_#*-RBh3<>3@tiOp-jo!62o;%(x>t6gL6Yo2}Y+Y=>R1vfGL6yK5l;QEESua$e0q;(X8&uxg^QJT4R)h~|5G|pA; z6_^#6k8fMJXJPJzybZk5Tx#m}{r#~|vY5f|A%g<0#LT=By}Z;C1rt33 zJ)_?bmmdSF`S0oC7-HeyI%y-cmI8J}eOG_`Fo>FjX@_F0pcw{#hDN@K z1?#fg0_`Lcc=4F)4RQ5@tJO$Ecm!Sd)8v>DAD$flOzGO#DAEEMT}@x1iF=e!=F0 nb`fH!)4#gTe~DWM4f{%w&a literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/door_wood_lower.png b/src/main/java/phantom/texture/door_wood_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..cc617316fc221a9cfc638f457d9af30ea6a03491 GIT binary patch literal 399 zcmV;A0dW3_P)5H=W&9CS}bzq6^e2!D1IOoqK(>|!hwyTjR-dSA4Yz& zypTjK9+S*uCvV={6jfFE`-4S)u{&cCJPno%?{{s>YcG5}bS)mPPx<2edD}L_Bj-ma z^+(|CcFjOTt(7PKYM|Q%8iM#{_Lsf+u(t*;=PUlKob~-q!|!i46L45->H_Dfm92@I z!G9V+_hxS)*;k_IsgxnK?W zm6>0@vlf_Lc|lqc6Ahpi-=4b=|DiMvE_{u)f=$>Hg9dt3@%zw!aNM5$`z_>5w9Z{H t2J#d1T9bZfdEB72YJh#$jfFGhegKs$9flr*#hw5F002ovPDHLkV1hz-wi5sV literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/door_wood_upper.png b/src/main/java/phantom/texture/door_wood_upper.png new file mode 100644 index 0000000000000000000000000000000000000000..93319d5d42fc9daa70b5e98cb6f5ec46c0790de7 GIT binary patch literal 401 zcmV;C0dD?@P)H75VJ2thzRtZ9eLruw&wj@P9QYcnd;cNs_vc*1=Bd|m{lnB z>*bQw zg9ahs$xINBW~BzopsrRTHSuK^7!*>h6OnS7#Pu{l(I&B)9Aje+&_FdI5kJ!+5oZ$SsjNR!AOKFczfB#DdT*rHno vjI#QDwKHqA0ru1i&pE)bJ3nMRD;oR&qOrQ>av`gc00000NkvXXu0mjfj#IT- literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/double_plant_fern_bottom.png b/src/main/java/phantom/texture/double_plant_fern_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5fa6a13e1cc1a1fed7d675a6a12fb32fac121b GIT binary patch literal 706 zcmV;z0zLhSP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oMV*6tf`2vj6}BR7pfZR5;6h zkwH%DFc3hWo4}d{LZ!q>1ieB6fmNWH=mRjG-tBc6N5?_xqv-(Cv1`>+37i>6A20aU2KN zb%~;g)oR7o))s@o0IfCG*Vkfqcb9&@F95{l<)ul}6yNu$s){IzxWB*W^Yatebt#I1 z)6-MN<1tlLp_E!1v)1eNgp`umY{q;(XF8qIXf%*g5(EMDdYwGaNsma)IT&&|z^NRou}^K)2xG-s&Vp$eZ6p>{aVHi>r1xb>S=Q*33n?E|R{{~uXn$0Gw z)e5B)VHh$RjnG;ngg{D(ZQE;)*94B^uv{)tN?}rdF$w=Q(9r@|`tX ztJN~D>tb0J#u%a~VlWu6v9W>cy1c)?lVurqcX#54soidy|JMWX@bF;T?e^N)_ncpe oPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oMV*5VTDIssI22FiAu~R5;7E zlCe%AVHAbGpMRVOFaiC6anx8@88jLd;J$D2k|7tIBbl8OifJ0PgSaB@9E(&d$_yr~XzuKR=g)g9GaII)HKVvy1G(95D-NXzV9;{jYuYw)a!N9=`^dWt6y4}Q#(FB zmTWeQWm%+BDbndQ0L^BT;c!SC$K2lDe(wMvlgZ$Dp6c~_yu7^7YPA>+hYSV-j4`aQ zuTv}*<=a01ux*>u(^E0Vpp;^FcNg2X3B!;e2vADly6(>r04kM=L{UT>$GEObuh+x2 zZB|xRSXfx#?d^?Ptv0)}E-o(Q{r#OxCIg_ND4Jq&xg1(+K0iP4eV^;=Yt?8pq*klV zJ1CV(lF#RPcz9rOaS`A5QA%NqVK5jVB4o2!mX?-yetw>-QkBbP34(w^p}^DA6IyFr z*JV5&lh5aAx7&Px#24YJ`L;yViVF0mJf#pR2000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^t= z3>XxLbJ&#t00K)%L_t(I%Vm?#OH@%5$3J(%x;hWv!b|uZY3PR=!D&@cLFOXxe`r&* z6M_tBpk0aUT#Z9uLj;Ai2x;SLXiBo6g;<0X!VK|x1~=r{n>VjVd0V~9sAqFI=Ul$$ z`~9AK1wgf0HCtO-j2<~F3L``O8~S7F^*W!AzY+jf_HG!hHA*S6v)OElg@pxj0AUy+ zrDS~aGAr?8(liC2-|HieV_eq-z;#`ulypZ9pj0ZMwH8-zPB7+A5(EKSYXK0qV?578 zN=dO;BuNqglv2h5q-jc$B%EIU%Ha5b@qM4|(KP^0l}-Ryz>G--lml!s^Pyp>J-If= zZV+>QV9u7 z0GiDvQc4OVLu8Bwiw~JTQ!zU`JG>S(5ncR=>$)hVOixdbH8TfLE|-PlIK2G$0stu` zx9W3t%A5P&x%>XP?X}zO!xFMpg<%N5ZV5U%O{b+YMs= zCVRHm{Vps(qtQTXEz0GxC=?2~@kz7%dtNw>!{C<-JeYWDq9|f^c2;yt$pI`aEtx2a zsMTuwWb}J|xUS3a@UYp~*dR#~s@1CTec#@-?;xY!tug&&tn=AN%JM7(z|_2%2Qte4d~oeu4GTU06){sS8FE-Kb(Hw^#)002ovPDHLkV1m#aIw=4E literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/double_plant_grass_top.png b/src/main/java/phantom/texture/double_plant_grass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..1ceb3de89f79a1ed7dcd0cedb2ba944234e8e695 GIT binary patch literal 717 zcmV;;0y6!HP)Px#24YJ`L;yViVF0mJf#pR2000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^t= z3>XZQA3(zZ00K=(L_t(I%YBniXcIvc#(!I+Y$Ya#?m?5#4JkqK5Kw|W2u;Z$)KlmaZ@%|^Z{VM}R5=rx=N}I7zvu&~PR-M*w`tYeER{cVdF~tl(No7mhgV*_rB!c- za*DrUH9I6SasI^j<>KO^Vx-ql`v)+s9VXM$(y}blzfLOvC-Z}{R;wx1YPH9pI9VV+ zK8n@s03d`2y`t+nLJ0EXquh9O9nbSnRrR0*fb`f9iA)^N^UyR+zPdJp@P2Z;?+F0i zZdbYT<~#tlZKG+L3;@dIvIKZMlBZZKD#OFW+<)*IfZE_RjYb22-?zR1;5bge@)$s& zP{4IvF3c~mo{8f)4w|OPT~JCV?#ivLEk2f>bMNT_UuS2f>$+4b6(wNcc^;8SL?$wE ztY(Lak*i8Bmm~LmLh8DXs;b=CeI`FSAIN62A&vR~N~MybX&URsnoMNkJqx2zOw&{v zjRr!9KuBMY5CA|d7NgtkD$74!@^1M(+uPfryf5xy2SNac?b}be(y}ae&u##qswzT= z;G*w90I<5cDmOPbmASc#Y*`ZZ$ACz#ImM@%X?cg{Lkw`=uhCwo!l)fg3Oq}%CP!GVi?T|3BSd3&cDbv}5 zpO{Le0tSBj2O9Xv>eT#^PV+AshJg?wSo`r8YmFG`Z4eOj00000NkvXXu0mjf6?i?} literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/double_plant_paeonia_bottom.png b/src/main/java/phantom/texture/double_plant_paeonia_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..21285f5e33b41e2698ea16d11bc56c12c31f08c3 GIT binary patch literal 665 zcmV;K0%rY*P)Px#24YJ`L;xiKQvfDRl@1>O000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*u3 z3pFlP#Kubi00J3FL_t(I%XO2_OBGQR$3N#{^Txr4Qltwh?8l5Q#77GY?1ziogh`uL z{Ubq}mhFUSAr$@*AuX&Ih`K0*N*yqU7L|({!-x26eD5~z-4^riI7)pt_g?s(^F8N# z?h!h8s!jngH$7|`iN+Z)=veX-z!@;8dWjuBl-g_-*99;#Giv65+C(T`RpWXNZJNi= zauZcAQJV;*{e>J|0F6Wg(6{Lu-Fdr|XqTJlSa7|J+(^_(n`=kV^?8UP0o?A|?{$5iwo>ef^itUG0?dI@L10N{EKukNqWN}!cMPXIkH zYGx@-SxVEah2<&?nE<9D&VP&KdlHyp`DZ3G<>n9Q8;3iKW2oujOkp7uHFP_`^&Hc; z>6@SZzWFr2F4hx(tB=O=`}K$8=vZhZnvbuy1whuFZUFAxJZD_b$;~Q`(L%?<)@m$~ zITBD6eMm5Qjh8Fi(nvJzayB;Wf%V1yh39_~0G879XbQmt-&h431mv>^=-vq>x&VXf zi2L#7F01o z?_MZ2;9uCi7|H&POnG#pV`7o;eg!@+gmSV49SiZGve#S_c)KiFMpB$`$X?O%|t9_Rc8mEH?!$lyY100000NkvXXu0mjfFrFT4 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/double_plant_paeonia_top.png b/src/main/java/phantom/texture/double_plant_paeonia_top.png new file mode 100644 index 0000000000000000000000000000000000000000..bc68241773605d16ccaf5fd2583e5b7d07172b63 GIT binary patch literal 727 zcmV;|0x127P)Px#24YJ`L;xiKQvfDRl@1>O000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*u3 z3p6ODyiz{^00LJ@L_t(I%YBp2OB7)k$3O3kJMXwZ*o8!e!jfdu5W|CqD9thtB6W%C z4+y$-j?O`K>so}DZXN6pc+gBt3nC9@RMucG8EX}sFGvm(NVVa%RLtl7#-G1{giz-P?fjRQwj<+qH0S*-eh{XJwV6${=?wu#}86{FZO6^o3-3PK0bQ5%;<83A|lLin*uUDaU zAGjZisv)3F3I(7^P%Z>M7<(Xtp)SsyPyiFN1GwAZ6hKdgVohCW?>7Y*msHI}Y9@)F zCXbdE1VE5+(QL`s{Uf;B@Z)K-`2yg^y<1GrKU7Dv-^{}lk}8as&0>B=w1>aV8Os8`|G)ggk68>Vba08y)YY(25U5_-?{ ztB9P)g)1UE1(?6Gf>#n~wj{{71Q}PENkcXL#E1;=;`&;XQBfNsKfIElR`udpcrg1> zPx#24YJ`L;xiKQvfDRl@1>O000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*u3 z3pXxj@}$WC00KHmL_t(I%WacEPZL2D$A7c58;gV*O-ouuIW*t_AsP|_QEXIBCUPL& zJm@Fz;E9VMq~X?tt6u>Yjj78X6Vo7z1`-yAUV$X_;POl2aCg zR$UlPEmS@W)eThtLpZYtjlX)Mnt`4XAhQBMPFY@(F?I(Po=25aV8--fX&2T^5Do2{ z5wI+HE^7d!ZJV@hYk|y%W*e73>fmw;dM3el6_f-OhT;~yyd@cbR`-~B4C>=?MP`M_ zg9_FGSle1C`zpYW(p`25hmnao9oJxUCI~>_Uqy(oWOq6(&ngv)8# z5((*vw#>nT;a9UyB^Tf7p&2q@{W>@WeFKe><}$PgtCzqCLOF>L9JBWOC>P@C7#!pv z`VDplbY%b?eP9F;<>Zl31{l79I_f(P&<0zf=33`%{q0}Xu`L42ONiPc;`}}RcxqK$ zdRtVVenmpV0=tTE=f}qhw!a5OKkyqa{DRUsFha221Px#24YJ`L;w%~V*mitGFgNG000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*u3 z2{IL^3T?&!00I3;L_t(I%YBo-Yg17a$3N$_d7)H!SsEcrmJoC)^$%zW8o|FnoCHbt zZbB%iOUax`2n{Z-;;g8|yg{Tx+bk&|gK?;kE>UO#@4e(W+}ynU0MGKy<(~UJ-|zRF zC#*!e3PBItoH++Q7&hWN8-t4ZZmvGI(f?Xhzj+Ek#|e1clVq4Qy!zNWmYfeHfyK&OfanjRNd4<8=33R{xpdOC6BU3Uv zXwX9eIh=+9@b2Zd*25A0G~)NKqAmekT|-`60Gd%G=LZPDZXZpRP4^dXZn(E$YG|FU zJ8vn^B_%!5RrJE$qEJHjPE1~N5_4Hg0EH520WRFFxhIdsq2?s!;Hh$4HI4}!AYDcOK82s(jR)35S)||9fMyhNI1MFTH3dP>IBz8l8)g@V4fFON Xpk(9K1#p2n00000NkvXXu0mjfB@`08 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/double_plant_sunflower_back.png b/src/main/java/phantom/texture/double_plant_sunflower_back.png new file mode 100644 index 0000000000000000000000000000000000000000..d488923a0cbe68d45b629c8d83982b31899f64c9 GIT binary patch literal 427 zcmV;c0aX5pP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oDY+3mdc_rvLx}JxN4CR5;6( zlRZnrKpe(@cTG!PAe2Nx1aWaG2nGED&W@ej^iw#Cvy&e|aCda}D-;A5K?-6iq-Z2* zY|g|%5^Tv!eU|%k_uP-?;5k^+@zr2uKDykcNwOGvy&eGf=TD5T4*;;YP1+=i!S{VE z%VOs=tu;SfOzIO%r_;vEK;?5})uGdOF(W5e6C*EHr|(umJlCx*naavNO_L;1%4{6xtpI=|N>M69(jU7Q4EZPCy&=ku=VY>!WlSoZsy9P;=Vh@C91Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oDY*H!Z+YVE_OD;z>k7R5;6> zlTBz7K^TUgO-d4zkkn0tno5-}w1Gwm6kDmcf|geCD8WM!DW0VCVy{9eA{OaEPg>7{ zKZhQq=t;z%gP;`z#kQW@C1kTTo1ba2X)_*5LhH{~d{5su%sjl`J2UW$M(2{PdU!G= zhbDR?F7h-BpU(%t($z1FPNyY6tTW19Y5`PLMbk7)(IP^ZQW16Nr zAe+siEq>*4K}BELy?Ob}CgXFb{Yvh8p|x)3 z%Xkiz6(c|94rskfOQ${MRbrh{YQmvwB&58%nJ3wu_%}d@b^uW=QMM}hgFgOSLzjAF e|Aiy2-}xtlRkGzLCld|;0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oDPbBKUs;00001WJyFpR5;6> zlRHZTK@>*MB%8#Y&5IBn`Zn8G6n%5@yHFLQ$bH2IUJJ6%G?Oaz}FtT{b=LW%G5P*ZNE7o@w0f?q0 zqa@rQl}e#$8t2Di=;2uAW;g(#aX&xOu@~YSblIp$0LQA^j=O&6`b>Pi4!egTDn-+= z>NcvbVAXB>F+rth{y+wn;F7Jn?Wnqf{o3K}v<*OH)lci8gQ_b4;%^yBFVS^vUOPB1 zK1}Naj)KHX0q-`ta-R-h+ij#efzW>UMgmk_!G3lKulNZ}2}Ghpc-h|t_5>I;DU_t( z^Ql9;6d+y-;Jgb|UBReHG1eUHorNgpn_Zo#HZ)PrH~Z$GkLWc_kF67Ob2HumfP#@l zN=Y;=xxKg}voOv6=H+-@07%S6FijJHPx#07*qo IM6N<$f;T3@4FCWD literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/double_plant_sunflower_top.png b/src/main/java/phantom/texture/double_plant_sunflower_top.png new file mode 100644 index 0000000000000000000000000000000000000000..4d1420395c74839aad526709e1b66bd96446182f GIT binary patch literal 576 zcmV-G0>AxPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oDY+0~K$Vl>h(%(n&-?R5;6> zl1)eyVHn4MqtmeM#ul?{+Na_ZBD8esr;w;aL?Ru;vO^0mtFvS4j`Oz6tiBzV6}N0Q{GXoZ<>ANw`M(eRq2AF{Ref@3 zKVhn?6oz2{Fn)c8)AtSn5Z@K0mev5KX<}Ixwryi1GMw)lGf(|wrz(4ve_)w z*enBilk8lsYG|sz#K4no4&O-r1<=k_(S-k!(mJgkUl6Z0JB+ z-*kUjVa)OY_&U|f&3EMtq?AZcQW~7+b4&fkD^wgD8rKm*(A0bvKclO{j8f8*EFYi8 zd%ybc3@YDtKpy4Vt24O2Ix+Wb2Vin2Lu#pmww2Cs0Kom835x4Uami~q;x-?lyBF0wyVhMo4^s4$k{e$L4 zD;yAyJO#ja)Y@AlwuObv5&(}bU8w$o16@5kSnA zFL7HUM&9<=+t$d(+c{D#yZ;Zc^MtMyy#Rn64KX&Yvm;&V)YWzsHuD>BVW>;Oo3Ky- O0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oDSfHkzF^y#N3LNl8ROR5;6> zl21sJaU8}!ztRTp;5A~^wl@m@45ZpYq3926;Xz-+LlWXeNYX&UQ$<)tupke4Fz-%1 zEUQBoFO40B8734YWT!TFn7*6Z6k6_OneEr5y|^rip3|2v&-eK~&%+OXArg$rvA&Ru z1f#OJYaXnnd9YRjw1?`g{dVjr4n{16U-uCBMfgbFVER-`XcxuZ#nT#D}EJo=%IGj7uA#@F z3A+u}Cn`}C1=XcUK#X6Wp?~C>^cp&T-A8;OPGeVtupA_&lJZq}8qMRzh^1(`*(Bum zX|6o!mw-@Riqt>eK=Zh*!yOSK!KgH1Ddx2>x^flg@lNq@!65;b7c#=knQZl}Fjuwr z&m}f?H3-e)rq??_*c`=qY>3=io^09_X3k{e+zPoj1tP(yOiU%M63e!$4Xs}ns!d_M zdxp*z=PlB7V3B8mr?MDvJ1l{*zL3-oxT$OMik6|1>?<#~NUtYm<-8V#m~OSdBZ6P| zVZ>6*P0q`XY(VDO5czx_(=-X%Zs9d_G>^OFxTM72i|q9daA)a~03;xipO%Px#24YJ`L;xiKQvfDRl@1>O000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*u4 z2@x5msWIsQ00JLLL_t(I%YBnyNK;`L#(%Gg=%`&J6rLj^28V>isGA7Ei5FuQ1Tv_I zAkFUbwpf2|x{=5bqPsv>u!tywuKL);n2Rv5D@PPePp~>iq3uGUlPu`#BG1}!qxb6L zec$JK-hUtLveB8oz&my)!vCxdAf3u!=gZjnvVL>zGh+{q0TAv91(LIKIqZBn;A;mk zEkiG=0;Xk}{*aV6Ur(r2>q4mhSpb}p%f#J_(vrXjs{UE&?C4^<_R|k(d!;O2 zet(oka1%lD=C&+-&q~9=5bg4mE z1dqsf^&o?l^KPH23Fa1cyqco!w*2=gAuHx7oZGTff@CYCw4S8>~_S r%8MS$U7>3k4l6P}&R%1a-o$^fN#&6CS}hr%n;1M@{an^LB{Ts5G7Lqy literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/dropper_front_horizontal.png b/src/main/java/phantom/texture/dropper_front_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..7d5f260d60119c9e67e74f071958b6a0aee467bb GIT binary patch literal 713 zcmV;)0yh1LP)q2ndMcqjd1i_6PFG27Ugx*iDpf}*kEW7~~6p>mTtc^8x(m2VtkQB>zb~A_f zeV=n?O8fi!xl#&%EXz@#CmH{xE&8XMwD5X$JA*EzKpR=~M#?Q|W20*vlWjr2Z zSr)_LkXo%qv)KgT_VyOf^U!r2r4--a-;Bp&*4Nj$zrRO|qKM&ei0}J+eSOhvHZe_; zx3@QJ+osWIFqur)-rmOdeQevN)9Emu&&je3%`gnIEaUn4nM$R?`T02)7Z=2FOdQ8l zDiwU+CkO(LkB^q^0MGLXf&kz5xw*L^2m*upe-*Z@FE$=TT%073`=s?{n0TU%QsNy63D6`E3tG)*}=IzkA+$;k;q2yEL% z2(b_Y3zEIPJ)$V0Ua$W?V=;G;CZz-*j^m}|zh=9;yS%=>VzgQ<4i66(*Z`N8mpnW? z@VDCSHvN8o5w^LxiD4LMg>!)o(ChVRx7)a`ORZL062HH{Bc((LK@>&51}iHoi*(zz zab1^QuLppx>-7759v>eUe;`d$lu~G#_Pc{ZSd^3!*L4{T1_0dM-QhUSqUSgc<#L%c zO)>I3XEvKH&0ClisitW%olXI890w^SpP!$Yrir2JI^}YiFbtOn{u&kMzjv#vtE6d4 v>EPfXkD>@o)0Rjq%UYsJlH|XhrfK{GOJ6SA=l+b|00000NkvXXu0mjfp`AXy literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/dropper_front_vertical.png b/src/main/java/phantom/texture/dropper_front_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..68a56c885f0465b97ff1a8fb48a513fe35c65412 GIT binary patch literal 712 zcmV;(0yq7MP)@&F7a}Ef1aG&vlcdhmC zYM$pQDJ1||mLa7?DMglL04$eF>h(HON~Dy;aZHjV*tX4TwW0uUdV0!aGC|jMhQlG{ za+zkc2|&N!$8j9;`8-le7K;Uw$%IO!!eB5UH=Rxy4u`bcZRYbi&1MtN^JukNlu9KU zjRv2epSZ3|yWOT#DsgmlM3N+ASw^lCQo6G8|~(Da+-OTCGMDMZCVgVp$f=W|Lm8hf<0l z2uRZuUDrv|l)P=*{}_hB&dv_2)e0#kFE1~Ae0-pkB93Fm<1uejioLx(gb-X`UsI4$lBVhUzHg!^A`C+SYPH%r zePd&TySqDt5Y+2+a^EXCjzhQG<-d4%cwjc0(d~B8G>t-%Bv_V(>$>D}x%HrFn(Nd* zu`G+TvokI(F8KQTLOVP>RGm(TUavWbXA#!96EfDi)T z_X)$0Fbvnf@O>Y{Fz9qT0BenfD2f=3MvO+IztZOOIa^y>1VKO?$9SGc9LI!VNV#0* z^70bkx5jFgsxH5v{2{XS6?{a7a3w$c7?oqqvkO<&VG@qr2e0000D_fP-`Z}OJkN!Bq|XypyL56r$&ge=4c-Oc>^L`d5&P|DMrgrpxx?*@}8jI zOXXK8)6z3$=GPiDw8562f;B&Z_MZXh;%*K_$}iAcxT`{v>&N$SIUmBM+!UOJIW)%v zXy{}ToD5SXu0oilUAb|lJ?&=+$-0ilVL2Q_!#gW9RPz7fvC=9$g$Ro~j)J^?K0U~L zNJ4_ngJ4adgegdZf#Na?l(rPXxrA5V>tcy2P%ezZBc&Ax(gJ)^lw07^r^YRPdt3u9)G!}^3z##<9;<8}zy2;9X8 zKYOKlhVDd^?yH!-^+UfcLjP5SVN0wDR({L>w0{zsu{$@9?!#$VvlFoH1z_15fqvJE z)1P~wk9lC&^x)Knox`S0Z&eVjykv=WKfsVo5tvg$d@==f8&}cz;Ub5lmDjS!3C(1A zjmPINKB|+DfWvaXXLm%j#IC6)FUw(CXMs1j0DEo*w(KN2e*{@#*&pT7&8Y#jCPcJu z3uyRsg~N;T$7IchU`YDVwC<=0C`@$7<047h_hA@QH_(!hN46tym_9IWO~$y}hsO8z ss-XFco68}ZJ~|i*oP;i{ZqIs^zn!F>nl}X8r2qf`07*qoM6N<$g2#R literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/emerald_ore.png b/src/main/java/phantom/texture/emerald_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..a26c35f6a08d6c6c8d61c42a5157eac0d182bbdb GIT binary patch literal 364 zcmV-y0h9iTP)*~`q zU7{!oZ<@yEdG@aB{5TH3!y#w*K>#$4qnBmrd7k@^|M|yn?NwF99Rq}X1Ck&>lC1cT zM|f;spP_=)5PjcAj%QE0t5+&RoR6A@eDvv8SdeWDuY^6Lr|3f5+Mg*+qQur zF}*NW$6*+Tc%UBO%r;al4K=;ow#}DiIjd;3yAi&403iAVfGuQM7X2d6-B1 zyH3ME5KI?4iM@AzKZ78Vh(HQPLKG1N6$KRqqM+jcf8w~=d)SUrAW@8cx3@Ppv%8BR z*r>li2yrpKz(>kbg<;HCt%#F}di}3-Qly^mK6q`=^Tn6pYa|FmQm5l52Z1;)G;$`y zep}tEBxzL?<^D2a6M~on*X@xn3n5v>+v$hn08wET#d=-ZwI^6}k`T2<#)zVflZeQ! zTb-9!vW9a#f$;{(DU(4FyyK5EV~1>B?PHT7N{x;WT^$^VGJQF+waG0pIzV#;K@fP^ zZGK>>rQEAD?Yu?g4*U1ZMRY+FNXka-w~xLqrhq-a?#K~4s{ydJ9!-^Rx(A(Du`*a$ zE+t=vm01_C!K--PwF{Ld>Ua%>roB76PtM!uCa_|Hk)-hUOz&&9@%r>VuK^M;i5MiK zf|QJV+rE&`Og$<;D@6I+f}1!YuC&*+zW@chewdttpka#>g3^;nX$EDpNm&gBsL5_U g!PuE{B=`@00oD&Z=_)76rvLx|07*qoM6N<$g8u};kN^Mx literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/enchanting_table_side.png b/src/main/java/phantom/texture/enchanting_table_side.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f461434b6fb521411c9527b2d4f9de31d9814c GIT binary patch literal 359 zcmV-t0hs=YP)TA zvJAk30LJ5JF9dI>2>@aMTEe4*({%O&B4LsEkv09oVs=5!mE?V;5DBMg6ZV+u{Cog2 z@@uO_&^)NrPM|o>0yv}5$nz&jl51T7_!Yl9SMc3A+>iKdZ4yFwUv~HD5CFqu;<{kb zgA`o5THi4o-C>OD%{_Ob02sEbTRN>*T^Ejg(r~NRTCO3`j)@U5Qa&63hSqc(W}1Pgr;E-+F_sf<2|@ z^8U;}d!RwQ`O1MS&0mZfBosEhxc&KmT)zIl_36+5?DvQk)@D1|c%|V=6N88T4TcE} zyBJlAHvLyVa`b@25jS&&mV;~!b6A90GTp9q^f?w8I6Fuzna=n`e}aPI*%xgM1|Ur{ zcg^#@jkDQUEbrdS?Ck99 z#;ST;KAW@h(Oi`4$(~2`I4<@3@%H|QY1f z+ld<}9CufcN0`BU%O4-*-5}<_mt|tTa7$(~|cEwOX?9fPM+D*iS$!oX09G8%X#R!lWLo*#gWy0M=MJ)vgl&!qqHU yyMQ;$n^W6|nQE6wnEoVMC^2gTvw?XlHN9Vyvte3RojFYa0000}1Cpa+Q@rwGd>htzM zguM+*Ph!mk8D_-;dW-+a-xNqWt6;f^r$Mr*C-ISsbOX1rNy8(922H*U{lD+$2y-1% zF!PzC!R)YYUS-MO`l{f2^{YL8|KI7&{XkDKgTZ5=v)hILGmoqNpMFh@;qkIq)da%{ zG8fqzOeUr>oZ(hTZ=U17NnC@^rE75^3loD@!eZuJ<)0})w=sCS`njxgN@xNACG|&N literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/endframe_side.png b/src/main/java/phantom/texture/endframe_side.png new file mode 100644 index 0000000000000000000000000000000000000000..e6cb56738ff326982902b5e916be6a18fdd690a6 GIT binary patch literal 424 zcmV;Z0ayNsP)Y5Z(V^<3A8Av=YI>KcGbl!O~LV7ot(b&PGt|5{qjzD)};(XvA1}2^@$43o(#{ z5Rhmkg4&4S-8JLA3A0?lB4FjgW9Qz!c{?+^O8x(DY<7nJ0yP*4kx_|K|HwG?4UP5$ zXeEaYBsp;y*2ra7=sdedr>RxVWfDu2K3>o!+5kj88=;%>4z(T+sMYS^&AHM5U%TI@ zdM!q&qj`O(k^pP*Vw3FBE?L$V+S! zLV0F-x#s~2GAE1NvU1&9`f|&ZjEC8%U~aH8koQqA*O?FQNiycb2B-q7#Ml%;`z1-P zSJA@+-)I>0a2M?u2wAcB7%;&NfWy?qENIYd8VqQa2q1>@>vxfbo>%1<6+kT4iWOIh z)7b!`dNtNnvb+V%=F=(h3JwO(A35FbyK_kjr{d?yPed%vFxC&thg1}73H%R*Z!RE$ SS9;$70000(Q0qof>WC?o(NO8ZMx{7BQsXI52Y_j_3{ z&k2q{7GiXH9nk_nM?&XdzmR31PuLv}8>{%9=FT(#Sqd>7N!3mDRAX!qf)CmK9(sFC zsR1LKi@cDOyh?Ys2Yf1u46R10Yc~nOx6Mpa{{E0o6YE^#49=H3=$>(N2bdG>0-zKb znw!e7HWT$P%u=BsQSN$&JLsA7s+Xwh0EHFm3wSvvbG)G)As$_!LOx1nXOFf6QzO-u zZ2P>s)MbiqK{G<^aG5v!cLY|cbwi7hg%Q5K&nYQ|wIlq!MyqF>g{}Acr@7D(^s#VL zXX!2dhxGIiX9ylt@A~A1p)(LdwSk2z<<} imm>g`!glpydhuU8MJ`>+y2gM20000anyr{S_(iw1=CeAu%HrJYllt*RIo1w{OAcRRtDN&0%$?f zsBxVIC4-$@za|q*S@H};b^yPHBoY6Hl;kKoq-%1TJ|mR`A4>9pv#59P{lma@DHC3u z0}ymt*#VOKobB|1n(4l+KYyqs58hD=oNn?3+^)$iX-4$V8=#u&H`w$keErWF=5XJY4bX)uGwiU!Dl~PzJ+qc!am4||;K|*C6XyV<#S z=A4-`GtTdERh~C8@^e&?9}mm&bTKVY^nAJR$>)J5TeY;bXA{Qe{_T3+_&uwq#wgSf`J!*|7xV@+1-f7^+hqbu&cxF}du7*#)xL)#YFp z#)~C0^P38S((!#@*kJC=+1(+|Iq4S6HnLD4(pG9iSX72>yJqdzDq4Jz-nA9rv{w{B w1`5DpfeJbk3K(4?2pa<4Df>LE%5dJ5KgGm=)dmn44*&oF07*qoM6N<$f}n*V8~^|S literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/fern.png b/src/main/java/phantom/texture/fern.png new file mode 100644 index 0000000000000000000000000000000000000000..fd769501b483e3c3f193d784a843030a43e55634 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`DV{ElAr-fh6Bel6*j4(vev_%X zn%X~h$$;>1_G2p243}7p8+2|vN-U8)rsipU=4MJY<81B@GnVPx9pBh?tyS5{u#6GN zE@SmEJi+j5H$$Z1E^dxpOtFmHE~snzP7tYmBE`V4b@ASJ)4y%C1lq^o>FVdQ&MBb@ E04j|$p8x;= literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/fire_layer_0.png b/src/main/java/phantom/texture/fire_layer_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8910f6908f43a3f90a562ee332eb9df9d9d98f GIT binary patch literal 16576 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 Y3Yv;>B|{QrOaK4?07*qoM6N<$f*Cc)K>z>% literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/flower_blue_orchid.png b/src/main/java/phantom/texture/flower_blue_orchid.png new file mode 100644 index 0000000000000000000000000000000000000000..51d7fd94bb10fcc79624bd8af39e467930f3e053 GIT binary patch literal 545 zcmV++0^a?JP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oDGZ8|rdQ51&1J7WgTkfupYC^#Zm>tH~tE>af}S9yTClY$8D#Z_OSATFeP5qto_r681U zN(8!9F?d(!p3DEA@1Aque;vnh#&Szv^r^ZtNs!Oy zab1^ItHrIl=4T7c0LpJQIyU5L7TZ}HZ@nRa3LlpNuo8nPikN@%k>#c)?Lle|EC=Wt zGE2Y3tF9EPK7b@Tl?3GtEz&WZn?wDG5S6oVub}!3(6ONuWToxwlJOSUyO$d2Mg+b3 zK5^LOQt>z?9fSFPOi&84^6hdLK*eEG{n>*PmpjkW0?eeyoZQdn$ZBBRhqw><^D9RDCrF3}hCF705jKp0K%tz zwROQp49r#z)xyh2&fnGy0wZzQRQ)Y8HpVf>#U0J?v!Qs=V(*$M17s_@?kmkZ=1PNt58})yj54GUhmmQP+DW6fi>yz@CEp(G%K~rbOgya jrY6|D`CgokJF&p|a9``@BDk#esG(c)I$ztaD0e0su1*F-ZUb literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/flower_houstonia.png b/src/main/java/phantom/texture/flower_houstonia.png new file mode 100644 index 0000000000000000000000000000000000000000..2f9127d985ac93e104f904bc710bef43972af25a GIT binary patch literal 530 zcmV+t0`2{YP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oDDY7N3xq761SNq)9|UR5;76 zkuhjfQ5c248*5sc__R?1N}*6_h#jP+L(xfx1}Zwn!In;fICOB(%|+X_OC}*>mp0I; z8H$60Af39{Ar$gNNFOn+L$0?W__*(PkSEdR^(~(1-XFem|8p+$QO4D=;w+Pa;eb{g>i_<>nG(XJNe-Ff{rbKCD9T1a7-FeuL?4 zpPe*(eGk{4A4@u&R>i$hBv4oraJY0ay3zaJEq9MBT34jm)}nPq>aHiB)_isr{ec^t z(TA5lb=Q+pxgZOxd2v6!AvDWv_~*lYFH?6tX|}aA+geKHg4A741~Gq?sC$ojv3U>g z1(dPK UPpolEDgXcg07*qoM6N<$g474)?*IS* literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/flower_oxeye_daisy.png b/src/main/java/phantom/texture/flower_oxeye_daisy.png new file mode 100644 index 0000000000000000000000000000000000000000..6d48913044b28b5e0d39698e44df74907907e62e GIT binary patch literal 556 zcmV+{0@MA8P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oDGiCS%uB&Hw-bzDYzuR5;76 zk-uwGQ5c4wlZIOS|HiF6k)NBfw5 z(8hIL;{7Gcr5y485>iSo)&IVZ*zMrC87P2qDfg#;>g*=~E`Qa;`)pshg9|UBLP|+8 zQ|M%qDd4&;=a)6{^G&QYBifgDxto7SR*?&BGy)`{Mzfc^ z7WM(?)4ZMgj&b6os9Ng)1dd|cZ!2TSK-Q+h0Xy1oEcByCgq|9pYOO2d%&=Izw?aOf uJ{TZr4$<^C+1dS{H8Gn|GfOu^@B9WLIJIMrEoH0#0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oMW3E$ODnEdT%kiAh93R5;76 zlCeqyK@f(&HD}ICVpK%DU{I?RB8Vwe6bvX>`T!O-zK50XU}Ym%*;@!HVj+Tph!RB* zBM3=^(<7+y%w5)ExfskPS~%72?0*0J!wmdagu~&M+-%wVl@tEKG)D7oz`Vkxk4 zpeG=fg4r{Tqom95oY5kn`G-=egq5#ipDGBD{#!Qg3f&BL(A9hyoKO|49C9!NP7z*j z8)C9!3jlVZ+6-VM!9G>3bjLwA5&h#vdj|lq6w*j4p!)a?*D6Xly*3l^P)7dsgJuXHx~58{^q*+d(VYN3sxxZ1^(cmwim^)VDzI++k}K#{#6 zhT>csec}zMa5BbFoMo-|pQJ#{vo-jiZmA0nz%nPJ|IMD3#2ZlWW)9X^4D<>(27q*# zqcLeNfN9PJ1}NASq!<8lKFG-+r^7UZXp&q2(gbpPo0rx9P9JMvf-)t|fOu0)u&vp^ f=xg${!07@2(nTJ11J00000NkvXXu0mjfR3~0A literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/flower_rose.png b/src/main/java/phantom/texture/flower_rose.png new file mode 100644 index 0000000000000000000000000000000000000000..895d78ffdac78b2d4ea9b5d720a1c72a671647fb GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4Uwm z85k}bMYaG%I14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sfT@Eo$GoBT^3`{_w$DS^ZAr`0K zPBhFrWFXRJ@4jwzhhpZE1FQnt(#GD^oqdwl3aO7-?(Sd|Pdv+Mq#!XvQeu^n%S4%1 z*A-s{IP!>Q-%s27zV_R1-v6cLn(>?KdNl5M*4>!C%qqEQ-NUQS{`Y2iT|38Q5a8z} zJg@NArGiW+#^Yf!)r}51(h1LIz1E(hma?RWLFC<$XRB)uhGd&=`}+3b6tyWT?vHpr z7VcVYxNYmJPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oDDt5&oEAsQ>^0wn;=mR5;76 zlR;|}Q51#0m)L2NX(Mg22sKTlMOuR(iW(F_Ma)7F>c)i>K`q@$SFT<72c%0W{s0St zP**O*jf5^-xr#=RCTWy;gl1+k(@bZci;!T9O$0rw%jMm3zRP zw@9T@=(UE=oVPU_s*J!Kg`IDXnx zllean_YrjU=AOrdyufs}ru1k8+i}sCD&lT_1OY(dlh4Uzh+f~uvkwRdV|exfrA=@R zIP=vXO^|!#u{8nT-okYCm`XhRA_~PADiHWqKxujGaDr>n=ahS1J>9>;iN_8P(jJy& zktyZWWv76CDKvbAcZo2~S_|83snr)3nN4TVsvAVKC_B|1Wq$~U8#J36G)zh0DV*>g zyRyQ=;&Zg5pkc}Z{6Pcv4glW1!?=hkfR^Q`wxJGvNPPzJ$V&iB*`{GirX~|)7iMwW zPLJ?+9qBWOuKiPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2oDD!8xY9_4FCWEy-7qtR5;76 zkIQQlQ51*2o76FnG7=$mqCZ4p7#u9PmsZ5Lg*@jsB_A7H^% zyAVO>%22S~WaA@Jm9$C8w9bRfbkfOnAt~0%M8x0f-gD0V&UfK|MNyOkwQ?&Q_)hc> znx>IXr>WQLER7pKi)j^rsXNPLuEwYyiAU2WY9Tj2hAfR6I5kHumQUc+9C_(mIM|?{ z#oJwm&C85FdL@%1NxV%DcQ+#@%YQZ)`rTl3y+^yYjMZ8Lz-n34-(>I&xbQh-wGfXs zIQ_EA!Z3V!4f@43nY?mLOjJ|Io*;C4e7JRJ-+b)X%eAK^d9G8I_umyc_1I%_wSw!q zoP2*)maH+(gy*Bb0Ek{!N@Pq(ctqd65X zZUJz&`fRVa?U+OY<{x~b<2!T%4{O^dFeSbd$iS2UtUR%!0czp}06R7u9!f|*@W>Z+ znq~t)*!J82fO?O&vzsEJB*_D-dNiP)rrDtV)k4jsXqpW)BP-?~u23o* t|2u$YWJSk!_O}0XDl;Q;df`Uo%nycTv_j?*Y{UQn002ovPDHLkV1oO+@?Zb} literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/flower_tulip_red.png b/src/main/java/phantom/texture/flower_tulip_red.png new file mode 100644 index 0000000000000000000000000000000000000000..3048b63d8813c271c31bee14167820ff9bbbf626 GIT binary patch literal 556 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 BCP4rI literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/furnace_front_on.png b/src/main/java/phantom/texture/furnace_front_on.png new file mode 100644 index 0000000000000000000000000000000000000000..92c89f3ca49adb60d4b901e52b568ed67ce8b712 GIT binary patch literal 661 zcmV;G0&4wYkY5<^0i#19e)Byph&Q&Kcbi~^%jYvaelAjOEZL|nMlNGkXJ0m+TD z2qMr$v}q9-2yKN^Gy2|yd+*{f?=$n9GiT;~1dGK2qtVDP7!1(s_0Z{b&}y{|l}ZJx z)e7+*4#qWB-Oh^wnB#9}dCDhrTJS`N)83P>apNTpK9WHQXn%|R}g zL!nS`t<`Gb^z@WDG@d}ejOO3i*x=a@4-avFe~-JnJKWyhawO9A^)>eQ_i=M`!;We3 z%gf6Xfz{Pj-a$T}$JW*s%H=Xjr4nkj8miSQDwPW7Xh*433Y(joe4pNj;BvWeadCl% zhX?fgea8FyJHEcY7^BgMBjv<8-6hV-%F09_lgXgh>tQe$U^pD&?d^?!8Np_=aikp8 zo}Ql2?RJ^N?|=l_?KWOsUhw+*%Bo~-{IjsfABd5J2z2N9`I&dZFY)Z`44qDgJJ5wk zk=Xc+q6mT9kP~W3kB|k#&SR0#_$7|VGv8B?K(pDLIG|@q-C3Y9C5&f?jla*IpP#=D vPEJmEv!phjvHXWP`#r6Fe0-o@uQTTxOf)x%b#W7v00000NkvXXu0mjflZ!&2 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/furnace_side.png b/src/main/java/phantom/texture/furnace_side.png new file mode 100644 index 0000000000000000000000000000000000000000..115f73d07c300fc72f740b5966534323a2cca3c5 GIT binary patch literal 564 zcmV-40?Yl0P)okmxg_`GuG~eWC=(_ohW>(qGVz<9xAo|}oloyKSnadd ze%9LSdCnG0CKDM928Ld*C#_aX8jXh3YBfVHmy^X}A+ZjeLZKj|(MUR-jszT(N+pU$ zqm)Xe$l-8MC={Z4z0PpE-OOh)8D4Q_x7#Tg41NrhN+tRIermVd6bJ+;oletkw_|j> zUCL&&4#P@wgC%_}bF77!J#AaQfA*JFr+)oMk@oB#~vFQD+76E!~pu2X?q=)ej900000@?kEP)#nY@ zno+&Kzr$j&NSMuL7>!043^8rbc2D0R$fwOUxMR+vmCsCZE>ml26XkV>WC za=8!+h0tg;Bs?CEgpPImUVohpc6{9NDts i&t}foqU#;K~SJ|>%xP& z34E6uHoNd&ZsH2rwkeV`xz1vb%LlvU3dLhLcD+(D3Yi)8gZ+GCkobn3S&R)c18*#5 z>MAap#rR}~rHy~`qlQOc8rSPLyqU37ZbAv`%94-;N($1?-Y|B3oT3r3li|an%Ey_R zf0%ceEdDm}!J$2j2Qr_9id{-PVCNv5w92)*`!jdZ#$(2>7RJ2*x{krq)z4*}Q$iB} DS~gQi literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_blue.png b/src/main/java/phantom/texture/glass_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..38885de79ea11da277fe7f04b546db9f7f752a76 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Q$1ZALn>}foqUkIY16SIGY+!{{x^2}Ul`}V^3>dng=a$g>I?EULKtVC)@Cp; z=Bf^HF!JNGZQwC(Kc43!Goi=s!&gQD-pyB-C#_SM+Q${ba-`KVs$olom&hs^h8G!e z)lpgh8Rn#2u@ka5Bh1i~wri7s8S^*BE`ea(TfuYUH}S1;dR%yQ2hf2Gp00i_>zopr E0I3&D761SM literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_brown.png b/src/main/java/phantom/texture/glass_brown.png new file mode 100644 index 0000000000000000000000000000000000000000..259b61c60ed3767a1de9d2984d26237d08002801 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Q#@T9Ln>}foqUk@fC7i>?%?Y$ zWcUs=vf51E!K`i3IQgoHX&}qR!~Q+L=6C$lwkcnEYHr0sosf0)0%jts9nL%zWoVI{ zYOAJTseWAUKwspcmC~D8RF?A>)iO*-zE*YMmgtsC7aLYFM9nzKyyR%`qM)Y?2b!O4 zUHgKOtX(YKoC^sjOxIN4_Fe+Igb!PC{xWt~$( F696qiP*DH? literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_cyan.png b/src/main/java/phantom/texture/glass_cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..d30caa44cb50a36c3489a7dcd87662ee0ec573ad GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Q#@T9Ln>}foxGd(fC7(;al*3` z40?B#EpS`p`&M*D!^x&a3XLDxyCw@1@F(whyk~yURO^Wg&xG{V7wBq)FwQO8lWOFq>4?p=IzZg3DB406jhEMQvXVqd_l-MVyAnD)fG?kgbeAe}O z({9-}_!?))bDEtIW|)(fm#V14_J&zRaaq)s}foqU#;K~SJobVZ+T z0^j9^%`W_xo47)@ZHnYfuCv(V^1&{-Lh;y*U9VJ(LS{z&U_aj&B)(y17GuNAz#EI1 zx{8ZtF+Q1LY2%;#sNvC<#`XFQZ)Pl&n^3~KvLs}Il7jTJH;i2$r)Y%iWcaYC@^NP7 zALbn(iyE8gkb+?GC|>li#;{an^LB{Ts5 D*7Q-> literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_green.png b/src/main/java/phantom/texture/glass_green.png new file mode 100644 index 0000000000000000000000000000000000000000..7c1f4e60bf759f022913ad3e2368097213f6a996 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`lRaG=Ln>}foqUk@fC7i>-Idm* z416)wA95b?t$D!W7k2rIi=ZQ)z2U2RrC*2t#%x{5qvYDUvaP;AUc-!Wwzd?*49Qm8 zXa_UDKIH};}foqUk@fC7i>+-r;$ z8yeDu*V}Gx61H$Xo_YC-i=ZQ)z2U2RrC-i_-hErer{p?yWox|v|CBh!*{h`(W=OW$ zMmre#`6)N>7`H!9^pOeZvHS3qa{}+?E6kJDDNOB?Ucqsq%QCuQk&P->s2@X#$$ER; zuk{Rm#_#NeEY5H<^rY?DG=Y!#8{;g2%duOgTiA!*2@14b*f$mEJO)o!KbLh*2~7Z& C}foxG9vfC3N8W;d}j z40?B#EpSU>Uw?q*ilmkXmyksA<43A2e-e4>@0^cZRiqv?W#*}m{OfpIwGxUWnHh{1 zZ%F6#ICgR&`-H@2A8zz^GEch5zR!+fQR1{JhfAVME)_D0G6ovDb5EGE+-2b@#)iIU zTbD2W#(yC5*j0C?_DZIPi$39Ehtdw%IS3~0>iQ<~T-}foqU$_fC5jeb;9!( z43;U3=bNlknjf+FT`bgE+H~yCi-(OX-W$8!FP!hc^3>cD0cl#t?RSWYtZF!$%FS@5 z=a8J}ggKL)`4x_zdALzpm|bN#e@!ie%W<8r4NJ5=mM&%zWxQzM&Of1Nxy!;+j1AIf zv;Do_${$!JxwW4~`WYvKpYirh0%FYH7`p_5b#DdFiJxf~7|1O2T@vU(22WQ%mvv4F FO#qngOjiH^ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_orange.png b/src/main/java/phantom/texture/glass_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..3a29e31b7c2fe068dc333000f8f2149836cf6986 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Q$1ZALn>}foqUk@fC7i>?%?uQ z3^F^uJ-B&9HsT=XoJEhXn3x8-OgQY{^J{*`zsEbz2Tiq}xadqsUwuKYMhN5V(^3pG zBwKC09gO_=Y#Vrt+mGk@$V}+5`|y=ffOqp1=1J=mruK2K;OOYGjA~e7qskS^$53Lj z-d1;OJ%gX|Iy)hYGr|l#X}dNFm@$82>=L*fx@Eb={;L+OftS<2uLU}g!PC{xWt~$( F698l&Onv|W literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_pane_top.png b/src/main/java/phantom/texture/glass_pane_top.png new file mode 100644 index 0000000000000000000000000000000000000000..02de5877d8fae5bc97f22db353258646380dd0a4 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Hl8kyAr-fh6Am!{`}_O*{{z?S z|4W`=RbV!Y-|ah-QDi5>l9@@&4(lX#7%=QiNZ^&I(C2BMVqvkz;RFN2)FVdQ&MBb@0O}P&JZWk)O?a@^fG6nDgAYv$uSe|xnsfNCV_9+P Si}gUG7(8A5T-G@yGywo5X(>4X literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_pane_top_brown.png b/src/main/java/phantom/texture/glass_pane_top_brown.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd791a420d195aa4e52a5c075cfa12f1a0984e3 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`cAhSdAr-fh6Amy3)%MI&t&*}y zRuFIC=_tOw{0u`^48tX#jf@K6JTVdtF$Nphc=m|5IeN*+#Cd!(I+D%6pvq_ASQwJt Q1T=}k)78&qol`;+0Qtrs?*IS* literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_pane_top_cyan.png b/src/main/java/phantom/texture/glass_pane_top_cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..9a34b84424b2af69360753f906630f62359d8435 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`cAhSdAr-fh6Am!fyh^wEyk^#y zp2ipkqXT=_^cyj26ft@jA7yKZF)T=AC^~pR%HTts1e<1ILB+w@;y!%(bSRsFA^w_0g1q`R Q5uiy7p00i_>zopr07lp&F8}}l literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_pane_top_green.png b/src/main/java/phantom/texture/glass_pane_top_green.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d9fc7d0329f05a7e6369c567b5df5cf3dc76bf GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`cAhSdAr-fh6Amy3z3!c-8YXFz ztRUXN)1iHN`5A_;7=}we8yOYCd153QVhlF0@$3*`vwT8y;hYUPAn-6oJ4Ay&S%D|8_EwtkD S#{dEq4?Z}ZHTscRZHD2X?i1m`fE5M>r;QxNA_!^r%;HF1Ivd%O6xs@Ox>3=E~GLn|gG SnB)VEV(@hJb6Mw<&;$UURU_a4 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_pane_top_orange.png b/src/main/java/phantom/texture/glass_pane_top_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..2866571b0fad5e57cf5db12f1333c5eee578e027 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`_MR?|Ar-fh6Am!1yDn{O9iRH4 zr!j`X=t0U%yHvJ-CrlI4x_B9OCOtUB@T95HG~vNs1D>Eq4?Y}PD&@QfXwJB#o+1c=d#Wzp$PyV3@CB{ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_pane_top_pink.png b/src/main/java/phantom/texture/glass_pane_top_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..6b6cd7689f4129e24eca80daa031bfdcbe0d6474 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`_MR?|Ar-fh6Am!jUDL1qwkPYJ zFF>*8hDne^Zg!;_{)(}V|m4S0ecJ^0|%dpBwi(44+gp61D- SZ|ZFVdQ&MBb@0Q4{+DF6Tf literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_pane_top_silver.png b/src/main/java/phantom/texture/glass_pane_top_silver.png new file mode 100644 index 0000000000000000000000000000000000000000..f226ecc96c5b7435fd4b87bbebd156848a402e34 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`_MR?|Ar-fh6Amz^otg15=h70- z^Aaam6_|hh`lVsqpd{X45}dEX>4Tx0C?J+Q)g6D=@vcr-tj1^HV42lZa2jn55j)S9!ipu-pd!uXCy!YnK{> z2n?1;Gf_2w45>mM5#WQz#Kz&|EGkvK~TfD`~gdX7S-06<0ofSs5oQvjd@0AR~wV&ec% zEdXFAf9BHwfSvf6djSAjlpz%XppgI|6J>}*0BAb^tj|`8MF3bZ02F3R#5n-iEdVe{ zS7t~6u(trf&JYW-00;~KFj0twDF6g}0AR=?BX|IWnE(_<@>e|ZE3OddDgXd@nX){& zBsoQaTL>+22Uk}v9w^R97b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&JM25 z&Nhy=4qq+mzXtyzVq)X|<DpKGaQJ>aJVl|9x!Kv}EM4F8AGNmGkLXs)P zCDQ+7;@>R$13uq10I+I40eg`xs9j?N_Dd%aSaiVR_W%I$yKlkNCzL=651DUOSSq$Ed=-((3YAKgCY2j1FI1_jrmEhm z3sv(~%T$l4UQ>OpMpZLYTc&xiMv2YpRx)mRPGut5K^*>%BIv?Wdil zy+ylO`+*KY$4Vz$Cr4+G&IO(4Q`uA9rwXSQO+7mGt}d!;r5mBUM0dY#r|y`ZzFvTy zOmC;&dA;ZQ9DOhSRQ+xGr}ak+SO&8UBnI0I&KNw!HF0k|9WTe*@liuv!$3o&VU=N* z;e?U7(LAHoMvX=fjA_PP<0Rv4#%;!P6gpNq-kQ#w?mvCS^p@!_XIRe=&)75LwiC-K#A%&Vo6|>U7iYP1 zgY$@siA#dZE|)$on;XX6$i3uBboFsv;d;{botv|p!tJQrukJSPY3_&IpUgC$DV|v~ zbI`-cL*P;6(LW2Hl`w1HtbR{JPl0E(=OZs;FOgTR*RZ#xcdGYc?-xGyK60PqKI1$$ z-ZI`wBrnsy*W_HW0Wrec-#cqqYFCLW#$!oKa ztOZ#u3bsO~=u}!L*D43HXJuDrzs-rtIhL!QE6wf9v&!3$H=OUE|LqdO65*1zrG`sa zEge|qy{u|EvOIBl+X~|q1uKSD2CO`|inc0k)laMKSC_7Sy(W51Yk^+D%7VeQ0c-0E zRSM;Wee2xU?Ojh;FInHUVfu!h8$K0@imnvf7nc=(*eKk1(e4|2y!JHg)!SRV_x(P}zS~s+RZZ1q)n)rh`?L2yu8FGY z_?G)^U9C=SaqY(g(gXbmBM!FLxzyDi(mhmCkJc;eM-ImyzW$x>cP$Mz4ONYt#^NJz zM0w=t_X*$k9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<%N829{ zoHRUHc}nwC$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^=R3SR z&Rp`ibn>#>OB6F(@)2{oV%K?xm;_x?s~noduI3P8=g1L-SoYA z@fQEq)t)&$-M#aAZ}-Lb_1_lVesU-M&da;mcPH+xyidGe^g!)F*+boj)jwPQ+}Q8j ze`>&Yp!3n(NB0JWgU|kv^^Xrj1&^7J%Z3ex>z+71IXU7#a{cN2r$f(V&nBK1{-XZN zt``^}my^G3e5L*B!0Q>W+s4Ai9=^$VGcjKDR{QP2cieX!@1x%j zPvm?ce<=TG`LXp=(5L&88IzO$1Ou4!{O>iCf&c&j24YJ`L;wH)0002_L%V+f000Sa zNLh0L01FcU01FcV0GgZ_00007bV*G`2i*z}2`dS3+SB9!0034=L_t(I%f*sG3cxT3 z1f>*&_5WYY)r$yTq(4xIDcP$s?4U$NGIN>Ps&*b~5)m{4F!MgZ-8+8Y0Kh%~0IBL_ sg%P0hKcevd+Ti{tj<0Y;K}5>=2SpVey7=pKYybcN07*qoM6N<$g0PB7hyVZp literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_pane_top_yellow.png b/src/main/java/phantom/texture/glass_pane_top_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..1c8580f336d7b8c397fc23daf5462048d92b3d7f GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`_MR?|Ar-fh6Am!XvoWkH`@QX; zFee)yP3=B_mqlBW5 S1)T&M#o+1c=d#Wzp$PzRQ6s_t literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_pink.png b/src/main/java/phantom/texture/glass_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..42d8739db1afa8031e9f5a820aeecac8f9300231 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Q$1ZALn>}foqUk!^V}2*Ft5Mh@NIgSS)Wj{BPu}J4d5OOd?bd(NGJn*%DS-3;gBt-gtVw$785GW} zcr%k}QejaJW6liKIkODC9gKb{T(@SBOk2yoCe~3~Ry{z}f!jE;VM~Qq$f`FCFEZk4 zqt^Xrn3FcAR;6GDJA=g8l2pY!wl~Zos>?QK@E6uG7{8tvI8j<=9?*ddp00i_>zopr E0BtHrO8@`> literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_purple.png b/src/main/java/phantom/texture/glass_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..fcae3d262a722f6dcace9c6b6e56df17c72c3459 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Q$1ZALn>}foxGd(fC7)p=E!X) z8T9TfTi}+&o-bg?IGNSek?AqNh`Qnfxnl*#Yweb5l`A>VTq*PaK~%sBCbQ|f3lCK;afPtB9G0RNbXR_W_ zcWXVv?6fO(LOCFVdQ&MBb@ E0E9q9cmMzZ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_red.png b/src/main/java/phantom/texture/glass_red.png new file mode 100644 index 0000000000000000000000000000000000000000..db4c5eb7ab1034d15096958c6c93e823a8716c5a GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`lRaG=Ln>}foqUk@fC7i>?#b4r z4178dW**5tzvcmpU)bdX#V$h!K1e2uWi8K=bwoWbiZY-y~qp{Ee|o=yK?mWahXFbRL7JtDnm{r-UW| D6+lf- literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_silver.png b/src/main/java/phantom/texture/glass_silver.png new file mode 100644 index 0000000000000000000000000000000000000000..846166468dcabf95cf883c0cd466de9c53b3f149 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`6FprVLn>}fo$SlUAjs1?w~X(C ztA2v+#;xx}=Nvfcrl!2`*WpL1P2X33a?)H{det*!h0)dz{PUQP>LnCkWnwU1yuqC{ z<@pl}<`ag+6|;^VVZ8a0IX<4@q@lO1!b`58mn$4x9gNPLWKMak8MvZ|@qz2-W0x=e zU@ypYd#ik~wUW8v@|o2-M-DgCHmDs5>Ha46Ts)z~EpTc}<9VRt7(8A5T-G@yGywpX C8c?(V literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/glass_white.png b/src/main/java/phantom/texture/glass_white.png new file mode 100644 index 0000000000000000000000000000000000000000..696c5aabd253b691f52250a5dede5e6f75eee726 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*x37`TN&n2}-D90{Nxdx@v7EBjq8eoiiKA@AkdK%qmPE{-7mix~n=`-v~wB|rI!^pW?+?YFJYz5VV$cmA0< z?&|laSGDI)SKwv!qD4_1ukx zubS>$`NOGSHet}foqUk@fC7i>?%?uQ z3^EZ1Hg{TYXcFGhU46yGG>~QDVgH_A^E>{nzP8)sspFQwG_C9Q6?`JI8qPkIWtbt^ zYOAFnsopN=&^Gh%V*@ol4>$QAzgRljB406jhEMQvXVqeQbWBFq;g*dmSEwIDiOG6< z-LLfwe#TkyoHEZ?8QhFxBRSd`e>1pttQ32zdQSgfUPa)pS8N9jyh`*lke~QTKLZdW*|pr)|t351+rN9f>oG=xG^S; zN?R0VuEL%fXg$JI*`Jp7!l(s{*(XSg4CK`5;H2`IBJ!CW;NUeKm^A9Uc2&1@2=`)2 zT~+JA=gS23A5=4=j=|J`>e9i_)V0Mg9<@)l;cs5sBAYPiKTx$;n~|IaQ{s@2Zf%j4 h2{ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/gold_block.png b/src/main/java/phantom/texture/gold_block.png new file mode 100644 index 0000000000000000000000000000000000000000..174002e278221ed250e203a2610a6542b98003ec GIT binary patch literal 740 zcmV`XE^uBA5q{?o7Mtk<0ce>ZwDkb?-}~`v zxefc-5VU*`%3mU=ZpU!&Z4erN=h<5cLuxZn+5}J;hpMHaj1)BrrH?_Ki~+}KKu=Ml zKy8@k1QlxlikUE=7XFeDNjPE{jxz$s9)mCmv}v^Bght>TUxj_x&V?7P4f_N*wc^|p`sLF)(t2tL2#V94rvcCQIumvplt+M;%12RreWL3Q&W`m zUPe3vv172D2rSvpe)=KJUMTjUt+%qoTqoZ?MRK}f_>0g!k93pp#N8iY~up}691VUtnqITknH064r8&TZ-@lo)3^N~Ivc zBEh>M-BQ_?5$6a&7Z7LLj|g~7J!FD~dJ3iHXt)E3SpueczQyk;Nf{$h)d3WjT3i5E zC7(5EUJ0`Z`}S|tc`m{3g7$Ry=Bte<@_zlX5<#vLJ-s2h~H4@p5X1zg>uX`bcI zv32%y#Q4Q1^z9CuujP)mOc_0Fy$14?w2Vel*8K zXC8%`Ly)C$nl@rb1nDFAUKl9yj=qW<8Jj9g&%Np=tDVhug-jP1QPky-cn9hV=_{(P zZF*T`qi-+r;e`B(c;!EuGIy3k(w(C#szGG-*T!rWcgmUPnOG5kxeqK0mtF5+vUUIf N002ovPDHLkV1iNNaC!g$ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/grass_side.png b/src/main/java/phantom/texture/grass_side.png new file mode 100644 index 0000000000000000000000000000000000000000..a4975e53478ee3b1fad636c7cc99a2798a043b16 GIT binary patch literal 408 zcmV;J0cZY+P)(QU7!qQ_q-1>VjC+_FRu#+3W?#m!Xqt%$ZX+rX%fq{;GrjaQmn1qTcpTHLHTj35q zC%E9`&tv8?!VGj@$#t=&4z~+&9DXN}{Y|lNI9r3nSsmMs4(~l*NLHV_Lz{#;AWiL( z-i$}W7}@UF$Jij9-y7$E_;j)mNp1)rN#xXEx=@3OO+ti@4($wrpeRA&+SWwQChJag zH|6{cV4Ye^%eGj@oL!3DvK2du(~Ndz0T#a=MRw)N&7~RW>GTNtnfW7Grv<4b(pAw2 zB-jBF34r|rvZPAyF9iQ-5GtheB{zfs00006I!Nu zI;ORT*!P_m?)!$6l0Q)HoMTT4*LB5l9JsEFYiXJy&vTA{===VwK?=yT+?SV^zdXRi Vczl&7)+PV|002ovPDHLkV1ku5TnqpJ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/grass_side_snowed.png b/src/main/java/phantom/texture/grass_side_snowed.png new file mode 100644 index 0000000000000000000000000000000000000000..41f619774d864ddbb26e42f0174998f52cd6e546 GIT binary patch literal 268 zcmV+n0rUQeP)0pZ0MJ-^(J*l=ZM>h^*^g6SJD(jLTk>9( zA)K0luBXEW>;xR?HA}$OoyqQ#Ui!4whCvYBZ4&O6;~JA*&vqV)?$_fs0{9$EA+Rd} zAUU1P6P*lQqJl+LoW1uyfFyMLEpD*J S*+WhM0000nJC=}8J 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 Ef{Z}XE&u=k literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/hardened_clay_stained_lime.png b/src/main/java/phantom/texture/hardened_clay_stained_lime.png new file mode 100644 index 0000000000000000000000000000000000000000..b459a0b59e4057a4bb518fb561c5b29d6726d536 GIT binary patch literal 3166 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 Hu0mjfeEILn literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/hardened_clay_stained_orange.png b/src/main/java/phantom/texture/hardened_clay_stained_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..40929db61d50f80cb33c6ffc671dd0623b74d6ba GIT binary patch literal 3164 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 LNkvXXu0mjfSitNg literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/hardened_clay_stained_purple.png b/src/main/java/phantom/texture/hardened_clay_stained_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..edece941aa72478a6929464aac948fd83ec03f27 GIT binary patch literal 3177 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�<60VE(a9v+uI2no{09oWKP>aIG5)AZx zvILdi_-eNl;v;hZwH}rme+{)Q*TX*eeNaFkQi*JABMEG#n|b~KA(r7U!uBH%+>nt1 P00000NkvXXu0mjfrG@b? literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/hardened_clay_stained_red.png b/src/main/java/phantom/texture/hardened_clay_stained_red.png new file mode 100644 index 0000000000000000000000000000000000000000..6561d123acecd6c774925cfc53dbcc20656f7805 GIT binary patch literal 3164 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 VG5*`OQ8fSn002ovPDHLkV1gB(^Hu-= literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/hopper_top.png b/src/main/java/phantom/texture/hopper_top.png new file mode 100644 index 0000000000000000000000000000000000000000..e0dbe96acb75ac539a45387910c82145bcf3fcb7 GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0gN_s>q|Kx0`wT^vI!{HIQi+;l{N!}V^M)#m`ovvdCDw}!V*`}ehV)$9cdheYpK z^cBrpo^xC6vyJ!dZAJID$6Qx^z3bE_onPj%^K0*iKJQ`kxE!)-)g+zMOEkEyezuvu zNoVP6tF4QZx7Xe-zE{2S^{-NfKYfn{+_Q8VelMS4|MZU$!$CPwBZdzT6k4`8Y;afg z6k^=Zb8i}hdxAt;K7$7nQ1%3iz#2xo`Ta^a79VnS__^-=@9U~JT7UJ_ys#5^6Sz_6 z#J$Mh`#3L{^fK@|$R5ku;C|F-#xl=4pKX3IZOim!QonX-+2x!yJLlTws#LdbXWTKx yuwaR!fS5^JukK?Wd$Vh1hkiU_|9P+aC$r8Qu`8GJi}iuQ#^CAd=d#Wzp$PyhXQk}` literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/ice.png b/src/main/java/phantom/texture/ice.png new file mode 100644 index 0000000000000000000000000000000000000000..ac946e95d918ec043f288c5d8f4f1ed850f027c2 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`v7RoDAr-fhHR6BP+o{fAoS$;P zPKfu%|M@0oHP{rg)z}W}Bq+EU@3PtST7u(di@$LxvtX>DXQRiOq)C?<4H?fk^rfW~ xvIQ{<+zps?h+%fOM90-0Z&_yFVr4@KhAAy4MXsf8ybQF6!PC{xWt~$(69BwkFcts+ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/ice_packed.png b/src/main/java/phantom/texture/ice_packed.png new file mode 100644 index 0000000000000000000000000000000000000000..50f0f3458ff5b9dd0596b6ad024769dd80adb739 GIT binary patch literal 527 zcmV+q0`UEbP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2m%Q$J7)c^UjP6Bp-DtRR4C6) zlHF=nF%U)9p5*j=y%(zXN|0jv=)Q>$P_*iuMGL+5`#YK0UZe#Bfsm~1?AaN8{$c>I z4cG-#rYivytuJ68q5=JtF59lMZMt&994PI^ROS8IWjBL znN=glaFrB&%HO=r`(HU<+aIcGI18wVXiXI%^<9n;5jxzytFMoRv9T+2Z0GYfwhwQ% zv7IZ2@wzfb&)fpIf20fooFm6}cKPF#AD(R6S?l8CiOkVjkCCe>z$SBS+vf7J`1>Dh z3M@`%KtiB^!rra6tH!9xW%21e%TXv4O;QM?$`Ll}>cf$$%u4Y2Kf1LRt&2dKyActm zy;6om6;Q6ULU>@^lbR9QQAVv^cUuot5$KZQWuph~T9tGaL%u86O&ppQ7+L{-UQ zd+z+rXyl!9DwV%;5(zL(M`dfyf*!OMWs_(CbKfLvGmpg*!(d2+RZ$=a1H#5pAFbwF zHJ~i+arNm6lkpfr2&`5G%JK;v+aYElVwhS@4Or%1!8r%FICQ4NwmVqn-!|XdzF0oh zG!E2&bP}WI^@wnu1Tx4bEQ(_=W~c$K>teU|h6o-%M6F&YEKO6eeO(PGWMPAWM}#o& zq3P7T_W8d5!WP#HtYKM}h-G=(=219;X_`vF{PF^yrvfwa9u-X%=5%_<^Ix*WHZdom z3**(!e|*ot-*H%uE4yGXT6UA6?;O!54Am#xWEs|dDIIjXE?T=)B3#VpXfchj^`;t) zh8iH`dX9`evPdYb?M002ovPDHLkV1ki+;Ew_672L;Z&lJ86I6^CyY&piQEE1Tnt85cmm)Zvi019t`a z&gx@_UlwZo?L{aWmU!mBie~N%hvYN&uJ{gmWq)m)jnbU*%=6i@dIDlUt)hq$qM)(c P00000NkvXXu0mjflRt8= literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/iron_trapdoor.png b/src/main/java/phantom/texture/iron_trapdoor.png new file mode 100644 index 0000000000000000000000000000000000000000..d3c974c6a0db09560f8d98036144ecc4e1de392b GIT binary patch literal 382 zcmV-^0fGLBP)s%|@4X6Ji3qh; zu=gGz1gI+R_j}K_a4V_Ov5xb*l`?Fm3FH~ZzdEVNlo zV)J^UE%)P4qA&6?JCp%i4{5*w4sifJXK5=qV~Mb-XuukOu6BiwX9L(Ev_*$w7&kP4q7;x>FuDux z@D;=X>Oddh72F=6hy>?yXWa*|X=ngp08^}Yr}Rl)2HU)XR<;i)5Me7bZPyw0VQW8= z`)S}E)aR(1YuHEz{#Hk70mDD=Hvs26%hu~8+}wePzsi*6eto$i761SM07*qoM6N<$ Ef)6>iJ^%m! literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/jukebox_side.png b/src/main/java/phantom/texture/jukebox_side.png new file mode 100644 index 0000000000000000000000000000000000000000..a3c27c1899ec70358f3658f1f7b47c7dfbdf69d0 GIT binary patch literal 395 zcmV;60d)R}P)rIhjEz167lhJcPa1F3;CD~6p80?eT6;uVg+b4-FdYxQeCqo%!d-C%zl15QXnUC|HUS{Ev#)LI@I!*w_R?6cOxv0vkI?Qlu4$xPknv76bnltN=QA2fF{P8H90iGG`!)p#;593SDpE^kLGjNix#jfEti{`Aq(& zp*jd{bZbwJF{nNiO$+Fsz~2C}6^sA&oyPSHL;MBeAnMGGV~ySb0000}1Cp0weOPc-PP;S+K zNsb0nS;zmz%wGeq>SliU#eYcd*{1)FY>fs!JWCkc9BU@TtXgk2gV$W)X#8vYGpq_` zW-@P=aUD}IJHe_TbyQTra{@OVU0@7?7RQgS28+aIgid)J|xOpP6)mZ<)pZU^j`b~8o_^>N5%6qdm#TA%L ca^qxXn0a5FTiD%v8qli@p00i_>zopr0J$4q3;+NC literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/lapis_block.png b/src/main/java/phantom/texture/lapis_block.png new file mode 100644 index 0000000000000000000000000000000000000000..0271489e1ba007b050489d976ba6dd76bb3b8927 GIT binary patch literal 754 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*k* z2si@|ddUO;00MGJL_t(I%T<%jZX{Iqx(yvj&C1aHG@ zv0#K|K(HX0By^`!T~+tjEDDJ5%9iXS`_pIh-S`R)pFj(Xr#CUuSNl?DPx)x~; zJk4Lx>m%Zh7+b&#HD|mXkzA1`wODHj!J=6gY;_b`h)X%f4XAK+@jIK%E%Esr%J9zy zeMXB}I%7p^!uE+mPvIINva$mj3#oZUsRl9i|0md!!NxOc0G$G=ilKojSaS~*Of~3f z$v5Yp(PFT<$H`HU?m%r;ARekG+z0$>rf7?`kuf_GZ!o!~nu?Z0Jk*yBoR1J3ss_Q) zcY!pth&rq`ARSx(5#tP&3Fk6xfBgc8$JaDGBa@?+NOM`}&rhfpYV~LdoZ=fg^FZfj zPQw}Ni$4~??&i~i2?J%AAP$)Hgpf%`i$;rL@$&GWaK;!Kmsnqaz{Tij+h53LMVao& zr-FzOiB|aTl%wvl{J_ScQt|+Y%!#Hk4+P*Wf?LRkPyA7W3}?5Bl-vw9q!+koIew{|SJ`JS{J+ kTWs9p+86ts;+FvY4FUU3uE~oUv+XMe4-L`@a5Oq2O4hxu}(ysIV zEBW+cx&S08>#*X#xaU@!&Ic*P=6`q?D0|QUFJZqE9_KIxqHc#EUJ73EU(3Jezr5FS zjBsGU6~Z7a;kN0&jO%)!{}=q1c3ulM1SBr)u;9OTcsFK30!d0*u0e?vNt-P|0~Y>Q z@tgz~mjxPVoX`p}02Z2Zo-_Xosm=Z`s5uQKMvwy;hLyY~{5Op6Mg$_d(?xX_!`T8l zz*uouiIO^1e0u&XId!8ZBv@h*)m!^tL~lJ@gQ(W_|DvXo{wulkpoBh3AR=cDRo`AX p#-;(;#b6g;i*s!LM)xXA3;=H6Tw4{zDz5+l002ovPDHLkV1ji9zy|;T literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/lava_flow.png b/src/main/java/phantom/texture/lava_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..af07f91d2c25b15584f13e9173988cc5d3017a4c GIT binary patch literal 9931 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 VzBT7zh!cl^j)virFR&LO{|D{T2crN0 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/leaves_acacia.png b/src/main/java/phantom/texture/leaves_acacia.png new file mode 100644 index 0000000000000000000000000000000000000000..d54eb17d4d1e7755e291ae2fc54a24dd030a3b88 GIT binary patch literal 598 zcmV-c0;&CpP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qRNAp5A0005SNklNWfk zMMc~Z72Nmjxg&VE%v3>oMrP`#lXPCvN!2sGUQf(7j>n^n$76}bV)PaHeE!1+LZJ|2 z`~6-_sZ^r#e!r#P@6!$jgZ3jNyWMX3x7$tb_q%w#-amP!Ua!;f`F!Fyj?88=`lHcE zcDtRVQYpDyF4F0A7(buS!WaApj8mypc!{LJU?3ikhlQ)vD&xpO9JZNGr!tvLY_;Wb zDSp47KE|rmYW7a;cDrqx@Hxd|kq$Z`DVa>tMRHuW19>Y}VQ+8jVIJkw^#=pU)>RSF4pg9uF45yv=5l@y%uv-vOTFmS9 z5@ldG9P%}w2l~(gh^Y;r7}%j6Ft75AXX%o3ZWT?p+qM4TaFAB3Mc;s58o%Ijx$G{s z+wBM6h^ycT@Tn(M#^5g?t{2%cg`~C7a+39quf4N-bdcBI?Jc@Sk>0q2vsbt#hcDv$oxfHlu zE}M}N*B?fskqn1JgEpJZ#Ow8{kFhG1iup#n(P)?=+D<;7R|l1l6pzQ%2M{X-gF(Hc z(Wu_JTuv;X&u8Ysazdey+StKju`rd>>9nx{8V-jg7K@1{-tTw)IG@kucDpGE=B?Fg z8ecA#0+vvW0JxLMq*#x~L&!j{*VAr55A;C*#AuUpu%mjwyyO{eaY>w;qG`2S#@}wY zQm@y40KxBn8XXRY*~MzLdf^*!3eIrO8!G#x3H|^eDi?wSxJ53{=d(#fi;yirip8SY zg>BnvW9;d4Dk=yB@Q64Ugha)$8Udh_{eJ&DRwk1%i2wn&6ctY@mC^^qMWS02(>+Zl plef9a0C-0wXoB4H;X##%e*vMZkFr!eT!#Pv002ovPDHLkV1h75>(&4O literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/leaves_birch.png b/src/main/java/phantom/texture/leaves_birch.png new file mode 100644 index 0000000000000000000000000000000000000000..a6773aff74a7f60366d6f277245cf26afc4f2857 GIT binary patch literal 499 zcmV2%cg`~C7a+39quf4N-bdcBI?Jc@Sk>0q2vsbt#hcDv$oxfHlu zE}M}N*B?fskqn1JgEpJZ#Ow8{kFhG1iup#n(P)?=+D<;7R|l1l6pzQ%2M{X-gF(Hc z(Wu_JTuv;X&u8Ysazdey+StKju`rd>>9nx{8V-jg7K@1{-tTw)IG@kucDpGE=B?Fg z8ecA#0+vvW0JxLMq*#x~L&!j{*VAr55A;C*#AuUpu%mjwyyO{eaY>w;qG`2S#@}wY zQm@y40KxBn8XXRY*~MzLdf^*!3eIrO8!G#x3H|^eDi?wSxJ53{=d(#fi;yirip8SY zg>BnvW9;d4Dk=yB@Q64Ugha)$8Udh_{eJ&DRwk1%i2wn&6ctY@mC^^qMWS02(>+Zl plef9a0C-0wXoB4H;X##%e*vMZkFr!eT!#Pv002ovPDHLkV1h75>(&4O literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/leaves_jungle.png b/src/main/java/phantom/texture/leaves_jungle.png new file mode 100644 index 0000000000000000000000000000000000000000..e0cb935aa10654b1e266b1fef5c002b713f42d8f GIT binary patch literal 341 zcmV-b0jmCqP)4_48rvU-y%L-gZGFz^tl;RGK3Jssjv-(>+kl z%wHtXA#u6VG@b3hA^{T!#-BhkcLX_Qbos-J=*@I~(dN0(U&4iA&r6BF@ n=MIGbE&;vHAXt*8!^Hay60a7O)er}n00000NkvXXu0mjfC=rn} literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/leaves_oak.png b/src/main/java/phantom/texture/leaves_oak.png new file mode 100644 index 0000000000000000000000000000000000000000..a6773aff74a7f60366d6f277245cf26afc4f2857 GIT binary patch literal 499 zcmV2%cg`~C7a+39quf4N-bdcBI?Jc@Sk>0q2vsbt#hcDv$oxfHlu zE}M}N*B?fskqn1JgEpJZ#Ow8{kFhG1iup#n(P)?=+D<;7R|l1l6pzQ%2M{X-gF(Hc z(Wu_JTuv;X&u8Ysazdey+StKju`rd>>9nx{8V-jg7K@1{-tTw)IG@kucDpGE=B?Fg z8ecA#0+vvW0JxLMq*#x~L&!j{*VAr55A;C*#AuUpu%mjwyyO{eaY>w;qG`2S#@}wY zQm@y40KxBn8XXRY*~MzLdf^*!3eIrO8!G#x3H|^eDi?wSxJ53{=d(#fi;yirip8SY zg>BnvW9;d4Dk=yB@Q64Ugha)$8Udh_{eJ&DRwk1%i2wn&6ctY@mC^^qMWS02(>+Zl plef9a0C-0wXoB4H;X##%e*vMZkFr!eT!#Pv002ovPDHLkV1h75>(&4O literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/leaves_spruce.png b/src/main/java/phantom/texture/leaves_spruce.png new file mode 100644 index 0000000000000000000000000000000000000000..602eab8e1bb11e36cb5cae37a633e3a04ac1368d GIT binary patch literal 263 zcmV+i0r>ujP)V)6U{-uK>4k;#VSO1J|=Gkd(J##0iihw#E}VA$ydG* zh&LM<^~D$B^pfv9Y4{$gCl@Wk;^;gj>EqFX!HnSh(XnTT))7O%H$terA-&?r@u>ne z62(R*_?ow@n(3QLQ6;bUub;>7DfvhLCPxjgi*rTM{8w!XL7UhhT0(H(me$ N002ovPDHLkV1k7ncSisK literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/lever.png b/src/main/java/phantom/texture/lever.png new file mode 100644 index 0000000000000000000000000000000000000000..051187fafb06cc7eda3261f864546324eb7836a7 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`{+=$5Ar-fh6C_xhWv*Pi_D^3! z!TJh#xXPGC~D|V>_5{AG@8NF)z4*}Q$iB}8Za)9 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/log_acacia.png b/src/main/java/phantom/texture/log_acacia.png new file mode 100644 index 0000000000000000000000000000000000000000..d22121072f739cf4ebd14909c3b1f603d36245b0 GIT binary patch literal 797 zcmV+&1LFLNP)_y=Sp{2+c8)bc9WfQT4&Ew7C2 zl`Q$8k)@gLnQj7AO~I|Y(K#o$_k7~pZ@zZzR)X{tgR@h9{N*j<(K)^LF>n9)lg`Nt zg!FLE(WoD?-DMoqBGNQvJQ^ak)|6$5l#=h?{EC#4vtGLjPsT%LS2qYDXf+e&^E&{R zt4EB^QN|dG!s2#Yq9~%$%y;Mb!Dm_#@wwQ01!e{ zW+4R4q`~HSOY68vmTT@-56H4CDa(>Ds?qJVs=#p2$2rIB`Xj#YBc()2xfh+q7z2Qm zQgZy_s1jPugr{|i(K(*yVXdVo3UHR~c8d^##qu7d6pv49WKk3}n+c1>55ycR1&ep5o@?lF8^C-}ec_5Nj;} z*)C%^=>P9O(%BN{96|_`Qu}I@;{Egk&N(hFXM|x$J^qAr^Nb&aY@W9O9MmEtfRG+R z5RhdVH}fT5efb6d+$`vyc0fpUo*|{g_kEmm^t&h3L)GnkMI6T%WAHo=tu<0g@;s+7 zn(Ny;dfg6D?Vze!`2j)*j_UEAL;&a9zRoa2DMc8Dyqt`yx~#Pov9>JGTBH16&q1r1 zP#6tvZvx1&jQ5vU1VMmOlEP@5b69Kn>)i!PDV#0wUcZ`rhY-}Fh%k!SgJsFGoH+iJ zqedNLG>_{I>vTh-ame7T$9Od0ho62!=6R0RnwOIyA7$R$F`dyqPVkh^XT!7o z8HM3-z2VKzzcV;LMV)rr2q9QKJYlWH=$zD+BuRr^mUDeOM=8a-=?q&IAS7v;((j$n bs2}n#D|l&eM}YP*6^5yd<$BkLLU^;04DCW$se)1I4Ndpp?{kY=Y*(oLWgs6xJiW?tS zE%^|1)vk*;s#oU_mMtpvE!|!s0-eFvQG?Ff1>s2eC59k1+4qc6!b)LpJf`nDwj+ed zu@zJmolY8T)iP4$xD=8Aqg0U^q3_5DDo$}wf$yc@z^q-MzyJKj$I#_W3c`ay66k%y z7{z%oP!Sy8nT_7wEs-&ZJ0Jke0o8~g^d(ocz#Df2uu>qzD)OnDgn$77!Q5!9AV3O` z9cBZuBZL^itA)Ut7Y;@V!wDh;;L+f&fDZ(Z4k{Z9=O5k^rjrH-4#xYex_+Ist*KYp z#@@i>W~d1Ft7TOX1#XwCK_Zl#3BZ1+CjugyW-dbZszggEJX)35dj&+*wdd_fLz5r^ z4(6cq>l@7+pqU%lj8ddnp>5so(CoDNZ%M00000NkvXX Hu0mjf@tPC< literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/log_big_oak.png b/src/main/java/phantom/texture/log_big_oak.png new file mode 100644 index 0000000000000000000000000000000000000000..d4da03e60272bf3d2a1a05bef31fcfdc0c7ff2ab GIT binary patch literal 683 zcmV;c0#yBpP)vFw!S#HF;o}L z=-t)s`)DN}-_6r}GC)MQs0yyGe{->zuq<=F{p7385V4+;0v5JZ@WJ@Yon5K0rz>)>^7^gouz*>URJk zvEDZPzf={yTuyn~yZ*2kW;||N020!lCxo)dXj;c?GQ@|-?EOz!-xHAf294B81R&AtIDT-V5b8XLoRf5PA#8VDDN)g!Q&TRe3(NXoy|X!&8GX z22vyj52F0O-?5ku02t*NKkxQ<@B3oL7}RJ-w{^Y;Q*RnB7h_ZvYi$p*X#?lg_%+Cs z62c2YZhi9s?z!*b_ z-N=rHIjYKeHO4u|s^0bFFBfCpoo8HqUv(Bj2)sWVbNld&(SPH6Q*Wsz8KQ=Zs^~j> z+6TT|-*7fB(E0R)gs|Q@Qc8I5**A`9(S7kh>jtC3s^0Ys_KjmX8*wrm@E2#KM+wn!002ovPDHLkV1lH8Eo1-y literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/log_big_oak_top.png b/src/main/java/phantom/texture/log_big_oak_top.png new file mode 100644 index 0000000000000000000000000000000000000000..99137b6f261431b9bf72e20a40d102d652123316 GIT binary patch literal 580 zcmV-K0=xZ*P)uI zy&&VHR#b!lOkmq|M3k1&pQhbQbxehBaH^#AgO3EJLYJLnf+NqoNp0H~-(srx`=P^3 z2n5d)(djHvCBefHF#ys5JV-2Ou$@88aiIkeF!6*$YgwSye`OGMlQ^ z#$#8EOm$h9Ztzi6LLj1S;_JnXuirQPSl@I0c1c7K5&XJ+n7;Q>thddxRsIWp4c>)! SpN}a300002NN6!bp;YPtd9AE;C(ahKmkLfHsika*^$G>e^hi{t(J+BZon-iNVEt8%0(-#Eu} z&Y78`4Msi4YK2n9*laRXD#F$62uh}K{TbG-g+wNJ9Yvm_R0;ayFVG&V1bG?5cJJZN zEqGH4*)~R2CXnkG`6h-?E95dm$y~V&Q1QP9v4UVx&9ZHXU5-3UptdPHStD}hOitlj z_waaktR?a)#+cm-c9xbAY-<76o(SJ)(n>{ca)&UNV-a_kkb*!B`IOZL~Yz;v|Z?C9K>cM5D zDV4C@Ikq)u9$_>bVw=ZQA|WtG$cqp+!(M}4$rV40;Cgec921#%;^*gekE)P|ZQlI$ zmjw0aSdd)Jn~-I1iq*_~X;aV-5ArEl1_6B%W2Z8xC`U}CpxCa+6Q5ZG?fY#H)h>av_)T4B2<&;IM#Xkt z4o7d;j$#-FF3(Tt1Ip+wCs>fk>M_8kO!<+E zObL7&e#Mf21$UrKLWm^7dHWQ`={Y{UZ{hIZ4Yd8%5zaa~PR{hkJcV5Uw|Od08(DST zK!@(DC3k!W$Ddj_+B<|Mvb1rUWaTy!?7*a~CL(W1*YQ2gqEvy!gsbhF@VG?J@rPUc Y7Xw^n1|Z?cC;$Ke07*qoM6N<$f}QSIC;$Ke literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/log_birch_top.png b/src/main/java/phantom/texture/log_birch_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b94f4c8caaeabd37415069740e5d80d4b68e41 GIT binary patch literal 779 zcmV+m1N8ifP)xYcle zK~y-)Ws^N`TxAf2pP6~z-M!cA*nAX@v6DEC5HwhTkX%6i14sx8gop$`04jb15)uU+ z4OO}*kS{2piNu#cAR#)W-BqwGgTPL*>%DvLeLpCctT3GV%*>f{X5`w9Px9{WQ%Lfd zGg1!x@Z--sxAQcI<3oHh+{!7Q-?_;8)*1j;uUtVpk*~k|2D$&|UjFur4=62CER|H# ziU+WcC#S@54TVJj`VX&?Qet}dJ{K;&jobU{m?fVW4Sz#K5E1ISrrYfjW1uKXnxR9kL4lMO)Xn{ow&cS&(zayd%fRXmkfNLqrH6EDAQyY+$Oy z7_g4#*dHFCkDOkk z{>LQmJvoD_(kptTrlJjjPQOG%m`o;!oLoh#-zSivEKBNYMo|_34(A-S;lyMSp{Z;7y=C0@KmEe8M$C+A zIwhrybB^I)^gq{4m1G@Mb>2ujxMy~r<=5M{=liIUQsB(l4b=M+#j$BI?-5ONRlrd- z!8O@qojF;6rH59?IT2LxxvmMDukw;M=Q`*aId`h67RqJ0&Uwe7>sbvoyb0f zfcK7^!OSqTxq<}UUOB(S*tDGA-da46ig0flAtyjM)$d_M>RG)|8=IDTHbu^zKA!>B zx7PUhqYuet7m4u3>u&+DKRf{7v(G=J=qsUCwx4_gfaAM+{0-@kBm^e+mb(A|002ov JPDHLkV1n1=WrP3# literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/log_jungle.png b/src/main/java/phantom/texture/log_jungle.png new file mode 100644 index 0000000000000000000000000000000000000000..0b7120adf0232ad9b0e6ac9d12083ce433d4346a GIT binary patch literal 609 zcmV-n0-pVeP)nKqvZ&+4}2JMPL`E>$T zvzoy1TY*qJmc#NJp)9dcG?Yp8qLISy(Jq#Y9F}tjGj9*eTeG%?u8m&{2bVn?cQ+1J z^8&&j2dcwg@A-zl?`|tg&rQSoWN)GsoMkaOOJmSV;;OxcZ>KgcKiH@gj9}H5hDj|F zkn4DVEqATu=ow;A@p8ea9#9Xd8crNNqoC9C9fW~nFfq{@HIpEC$V+r()Jo}Et&FO2 z@3(FEowSJ}uG+|oj}g;mWZ$%omps}kl;gRn9~xMGcU%2rworY}VeP-rxv0G}w)HnN_sU&pS#nka#!S$LcnZKR+F{jrI|PUK*971O{Iu zLA7Y8P*L`!m!p0syZ7>ljv&!QHWJ&tehW~28qOtowy+gFgk%6eB00000NkvXXu0mjfj))*O literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/log_jungle_top.png b/src/main/java/phantom/texture/log_jungle_top.png new file mode 100644 index 0000000000000000000000000000000000000000..26b036168600c6a1485aafb08c81599bc3444332 GIT binary patch literal 683 zcmV;c0#yBpP)V?|Ztg zV;BY|lL>vlf^=MY4c1!bvcZeD3-sW(C#6KwG;GQQ=NybVWkWMURf#d8s(e^}C7aCs zdvkPa+K_X`dyktq`o70GM+l)7u-4M|J*rC1x%%I~U7*e=B62G5dHn;`;twHI_*=si z5n&hxXh2obOJ`i|l2XDLLmCp>IzvRzu0a2|`c@{AGpY)}<#Qv<-q+uV2mrI$tQIlG zuwJiOE|=t->-i)Z;M>Au-tR|p&P=CM7K=p9VRdLP{Lu6~#pnhEhbg`S4j0o0kuv)DU5t?=iz@PpPBQpXI z;K0D^Pe;hZ`{(m`!?AO=q z*G@x03`F-Y=w0Li0x3Wmgp$w`dJRZCgx-4(;u8?Pi%&H=M!w?VYByecW;}LWf7~aV z(=DA0T`i~LNXvPX9Fsm-Jms0{<$6Za%eLhsry?ba}`Mxvyt=< z8z6i?OT7GrPM?{ui5D)x?J&bZjRHqlb(|8%tSFb zTXNCMRwsS#_2$Lvb{DTW{VUzaAovdsH|({A^spXe251tR<}m<_Re%J582|;v{!Ft1 zKm!<^C)^r!0mo>00BC?Xq6hMiR1f`RquQxpp^bna2!hSuiP2g>|MoOd40--Sg4xO@I+BV9MtmE&0&4!f19^t UfC(=i?EnA(07*qoM6N<$g2JKDPyhe` literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/log_spruce.png b/src/main/java/phantom/texture/log_spruce.png new file mode 100644 index 0000000000000000000000000000000000000000..dc1aa2f04a7e4ab23b6ba4b0a16c870a2e5f73cc GIT binary patch literal 451 zcmV;!0X+VRP)1qN&5QGPIy)`Pz#x))og%Hf4tGVAma*^ZxAEm?BQp1uTL(le6)!kDYMxE4dXD!<< zI`;iIwLv|xVsT>c`;iTssa;PR9>1A3?d4+NF)Tjv14&nBbt}$$)~zI7^m#vy#oPg< z;Ok*x(_X~^u#kj)HL=UQVe4_ti%3)vtmV53Wr+n^%G$>+03gT_Yqt1QdcmKr@m2ahKaVuXzEi+^k7_=k-Q1Du0QO0x& tm~`Mmf?2FMSsdTxXOyfF5f-0-{s2}3Rq*V~q9y~!x8`h literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/log_spruce_top.png b/src/main/java/phantom/texture/log_spruce_top.png new file mode 100644 index 0000000000000000000000000000000000000000..280c64e4a16379ae6a5b08706448c4eadd100ed3 GIT binary patch literal 609 zcmV-n0-pVeP)c^{cAg$ zO^6D?@t@U=;k|UR!V6BIj>hM2zX;WQ!MoE5H*t%ToV0BsWf4$ShQlGt?H1CmVguql zN5SKKAk0n`f8ffZ!l1lpZdYHENz}zQFytS)m3^OcY*NH%3%gH`X1q zd;_SlhfP?nYMg*sAGzApc<&JrVvL=CLJ0_}+WA8J@J>(zC%MaUnM38!6BRC3b@$1+ zjA%7q;D8Ri=>c7l7U}!ivd=lzTiavm?Tcev3*vY*9=_YK8i3m-~9fGQ|i5Y_?8BV}^zqfO1nc{wB!3Y;WZ#g@i zb_v^LOv@6r9*>8n1|ejCW75n*n-m;88VGf?PO=?cJ0Yn-j1gCse80NuX>4Mm`dbr1 z*yBE>L~J{00000NkvXXu0mjf7U~B; literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/melon_side.png b/src/main/java/phantom/texture/melon_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7b430daad4c6b6f4a9557b273a3c4478664a02 GIT binary patch literal 449 zcmV;y0Y3hTP)9;t@b=u*LvL0I6(31KtDkNADK^vj}S>yElq<4rU?% zC%wP`RE#xxH5DM=@Uzh}d0KhGb0T5*)43N_%0#IrgAnyPG^dJmC z6VVd@YV~9kAd=)T;OjG?Z{c5nR3L!jm8AjF16-c~bQAGp{{rwE=nVk!N*mpE2EdFs z27u%WvGH8D_4BSZlH|W8BeT$aQB?EP5Fpbi6Dd_-m;mq|EOJW*6@q;M_@2qViG{~m rPKRziOOJE8GAy}tKQgzQ77y4DvCKk%i3&oi00000NkvXXu0mjf`=z&9 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/melon_stem_connected.png b/src/main/java/phantom/texture/melon_stem_connected.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5c10e12568865928cc9c1653a171dc3768ad68 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar-fh6C_xh8D#8ge%N!g zx3v6GKix2I-n{=OBvK?c)nsSCuAjuqvXiaFah7M<%_}Q|AFfl3{CsU~^ut*RZ6czg zf7PuU*2nMno5`4de%@dE%1JeI}Mdu3Z^MN zui=ZxzOSsgG=1gPZR{2A6MGIyF!yZSYy6J?%RR-VH4ICyRA;PZJ!k2qS*_XEXsJG@ nI6YO!>5t%!-wqr<#eOh$XeEA_WD{l!bPt24tDnm{r-UW|fh|Z^ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/melon_top.png b/src/main/java/phantom/texture/melon_top.png new file mode 100644 index 0000000000000000000000000000000000000000..65cf169fbbb22868ad5a5f16610896702f6ebb71 GIT binary patch literal 326 zcmV-M0lEH(P)u%K|_!UVqHvJ_a-u6%BQ~)G-p6^z2 zWq=bH3>kuZF_MV^lLP}SgFr-f?+&K2{NM6(# z=*U2Ca-C#r2PNPWjzTt10SNRX1*(aVNm&8NKARa)3dq_On<~e6J~$&zfi59$ z_I(v_?K#<`NcSKI#%Gc&%yJZI0sn-PrVv5-d^tBIkiRRN1QfQUoX8e1c!W(#UtP) ziEe^G5Zw>3_VQ#c3xW$m0E@M$Ha7kLpPKrn-E~1}Qo0G5mpypLjF_pIWVRzO)LchV zNlNDwZr*A5l+rxiHqQOxjneAH?g;>KTBf$~wLOEU`kBN?1`P%<>Y}#Hlhuanqo>GQ ze=|e%%_8Ym5LAZ?1@4}?tIGZVEZhe<2_qd90Re|;!PR_V!a0I3jy13`ee|l;93{B=Pk@{hGUNdd6@e)w5cEQL;~yGC->h3H;yaDQGMh$ z0vGW&bigpg+mF9nSmdw$GJu>}Qd@~`pWQi-%Y@+FjJ2Huo~Djbb(d=qIW!csS^ZUZ k#y`_}JCSy8xi0O!FI2(dh*=W(&j0`b07*qoM6N<$f&g)x6951J literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/mushroom_block_inside.png b/src/main/java/phantom/texture/mushroom_block_inside.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e7a0436c2c7e88949644dff3db03a0e2106b13 GIT binary patch literal 315 zcmV-B0mS}^P)A<6(X9%6?H;dbY2m7u3?AwaIYn;E7vLAN0I zwg(?ao<%bwm>%~sn+xh9S_4I&CSR=oB+c)MHYQTiL-Bz znw0XpWl-QiCtxSu3OUf^S(K3uU`R$2CQut7nLgW4EUQ~&p@CjOuNFxe1aUuo_s=Si zP~w&%1lXHe(ECwDP$^g2TtOFUhPQqsjm8TJldYKWO&=9Ve(=_+`~hZP?aEf%pb!86 N002ovPDHLkV1k_=fXx5^ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/mushroom_block_skin_brown.png b/src/main/java/phantom/texture/mushroom_block_skin_brown.png new file mode 100644 index 0000000000000000000000000000000000000000..1f52ba898e64fb90d86a8638a4e1ab350d861f62 GIT binary patch literal 546 zcmV+-0^R+IP)G6fd8kQ~i=ZP0?))6=3?TT|4g1dC15ECI_Z9!qO zuST9rQF&Pz(TpORIl7v&fK&ao>H#yO3UXrJ-=OiaF{MDfQ3AloBr_ufudAavABu3= znxNu78&pEh$j*wm0SG>~5-OSZfteOG!8kgb@npw!K?0cBFbVniz^g>|!eEoG%`f)x zMjsL^Hb1koiCh3&*-E@yzP6L9iak052B#j-oyD}Ls`3Kqf)@}J!yT&3-UB4-;pRUA zWesuzpZKr0 zx^HjOvG1RTeY@{r%o%42AdopG9R9xs{7_rYKrQlv~x8iTzT}8t_LayJ>QAlAKLdIkMA!ZQsW?`#EiF zUfk#Na^APo?#2IO@#!BvY+6ho?D+ZYm&x$fxW{CHDq&p}7d926p6%W%JAACVq;sGr zodIT(UOxW=fKs&_+J3vTr&-^f*Hs-L0AtJfV+YW*Kd20ls;JlQUVCtJ1psJfKnoE- zLnGUTEh-J5}`j3Iumsi;O zon~t_FqpuSLW<7-E~pk=ZD??O#qcis#8T`ME7VY$pg3rw4ccMIF~-3bgAPFbLMg6M zv{9!3qRjIer{nGbO#noZM5;xplY}pdE=fdL3m2NN-REmGFF30000Mb8*BeN z{Nc!*3;$Cx*)m%mE;2}e#OrvCOtM@9Wl z{4sIDh5AXR%?uvO9P$%Gf7^S#}2-%-?2_Fu9rcp)~i@QLi+*G1_n=8KbLh*2~7Yq+%Vw) literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/mycelium_side.png b/src/main/java/phantom/texture/mycelium_side.png new file mode 100644 index 0000000000000000000000000000000000000000..5547425881b2d3d0f776ab1812943f5d880f9e96 GIT binary patch literal 441 zcmV;q0Y?6bP)f~HDn~lc0?Y0s}vDIP#_QBqc!Yrn1-=%%gQgw6+r(t2Uv8$5+-IGJ*7<8{}C9BkF zA=IO*YjL&|i1#i#a(1+@#mGIliA>VDPOSpm9VDotm<5QJ!$e1gUECDn>UUg=BLq z>2exD420()V=x$4V79Uc49gmPqlyNfnQdcPfoA-q1qXZ)M~Y~A;r=@4tH+# za%0V6X`c@-eosFSgYOV4i}Qv3*>pzE+y2Jm!h3&fU43iIN#ViOyvUD7JDpDMn~X*t z*es(bW1IoR!p;7Ds51I-;pkL4XQM<+iTH^LRPSSNcU9|&pcm6CYh!1C&&HSDj^3Wy zo$aclvvvUW-mOcoPO|9APesmYm8{L*O$J|0rnbp(0b~L|B$zv(^e-d1T_-DNbJqlW z?T%hBs478TG46*mZDDA!Eqg0+RkfmTkZAsxnNSHPBuR1CWWCGuzY>+~0L_^bT6NJn zz*~3l)&Nm^&-tua?M0Z6r-uD%ll@M;JL#LVMyHlw1!IjC;E-0O12j2+v1u=~JonAk z{$^3}BOX3Pen^ksW8{Gi6jgz+1MB$JD{oq9jh@8|+OB4`^#FoNMD^*#<*@&1!&}Kh zQv~6C542S7!H*`4ljWfZXR!_EbTm>|e|PPP&g%b2@dG|g1`!1SB@nq2 mP}Q{|FhP7Z5&imrQs5ui-aDkkm{PF-0000${W|X(U8MLd27J5D)(U|2gKE%iQ%mjPBa$_GWg^G{cFlvw@vVJydk^HmbyhnPp2~SNJNF-8NH`XAhjX!TU|!_|UuRA0K?B4rAf9*g zpn=wzy9OW;cl za?_Gw@G@nnnU`M^)>B@258}B)oB9Ii>|1-FnpCT5XPqbgy9cQp4N`j%?1Ac1Lc9m9 z2C4b-PJmo~_F$3q?W#9)@wz__?t{U2sF!nBjr?MK7kD4M1l{j=UG>PxRZbCfgz5pM aF@6I=BwV^<)%{ff0000LKDv1O@VjwkG`?hvczS;k`Y2;|3PBNfePY- z#F5p&Z3Za_7ZU%Upsf5qR)81Gh8X}07Z5){M&^H}xGY=^+;)&62QiWV$w~_ULnTH2 zyYdNuB|$Vu4#o$m$rh7FQ3D393=IFx1bM+O2$mN6Z^Oj_mITot8)1Bq8W0~@4FKYq Vy|9j+D*ylh002ovPDHLkV1maGXm0=j literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/nether_wart_stage_2.png b/src/main/java/phantom/texture/nether_wart_stage_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b9b674315cf0ea3f2f3eacc94d1f1a18f4377949 GIT binary patch literal 480 zcmV<60U!Q}P)iCgnX{nG}7+6N2P*`B0kXVSdFbyQgOj@*Q(V|V!BlHM8K$~_w zLQnH=&dodNOp6v>IGi)*f6nimdq)ud>)g9N;C5qkF#EGkA1|?lZl9$c=G%e*qs}#5 z=i+-dhbOO!yJ@R#RL~pgT#bcR3@j>sf{L5L059Hm~T=W0}NCJm&tka`uv~r6&s@MSHP8a#ri_f3?TB6 zXl1?=4WR0i@a$6b#@nEZUAu(=YRRzq3S~`fh;~+R7!Tn@}mZz9<7uz{hGBM=m4I8X$4@Y*Iin6I|UN@UcG3B|h=a*4Q$B+rDI^YX+ W6+$-Ii*g_U0000NklMQq!J`>VG$KN z6h@0^5d`jP+p0~_qQB$xoiBg0xZL0G-gC}(zQ;93^YeJ;_v_jn9K_K^1oJKzeAU(H zt*X+so|y>?cekZQ&kn}N^~_io-sEI#_VuA8ElmMDCz0RRl9I4JGNSuTN(y3ir!j4} z;~*G>8Iuo2B)K{-4_7KG5)mhaP@a{ALJ?hQZ&!huoE%(lYJy9IwtPOA1&;?Em6a$= zP1TF{Vl65*UrkKlaLx~VQ4zY!%awS(q(mKkiN)|ZI~#$92ADr@S2fyJ{{!OrcZJw_;z!%9^7&|5j?I3qchsCwKc4Eb!i=T zu6i_bzNB>~Hy4I^5zIPJV63(lHi=9!J8?qO z93Iv*nCnHcJLPcTtN8VrZRq82yP9h8_NKbEy`Q5|+!4%xxVa?7 zt}7@&n&6q%@7E7u*dD9zk3?XS)@(K!5&;Or- z^_1zNwX_t0(i12WF^ZD-MhGNdmiO??=Z3Sm7%u6OQ{DyB`UinG*&?hOlnVd=002ov JPDHLkV1nUUNN4~6 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/noteblock.png b/src/main/java/phantom/texture/noteblock.png new file mode 100644 index 0000000000000000000000000000000000000000..a3c27c1899ec70358f3658f1f7b47c7dfbdf69d0 GIT binary patch literal 395 zcmV;60d)R}P)rIhjEz167lhJcPa1F3;CD~6p80?eT6;uVg+b4-FdYxQeCqo%!d-C%zly;)E;*Dcy)NX>ovX_|Sj)A>v_e4wBNq&YiNHMwC3MKwH8Dq234k%i zMbDQ(hY&=iYgS&H$^&oQmzY)pRfSs`$L^{-9kC}*jn*e35HUt8< zd9 zZ~T8g2iVUXD0ZGeCVH~_hH1P#|9E=di70>*VI-M?tjPwyz9rv?Hgkwu(~h5}>6D4R{e)4)J&c^d(y&D5@DD-0@?kEP)#nY@ zno+&Kzr$j&NSMuL7>!043^8rbc2D0R$fwOUxMR+vmCsCZE>ml26XkV>WC za=8!+h0tg;Bs?CEM$444?182X3nwziG|_m1vhwZC)DK5Os2 z*7-D-%LRwSA+X!+uv)FKSS&D`%>un%50A$KmB&4U!2qYz37gFZjR(zU6RA`Rg+c*- zzaQ~<9NlhL5DW%ozf>woA6ZCWCgnjqCM_N~MDJdX3d;B^O$)7Lv&%(&;p6wHmhD ztwa`=5!fnOxj7sT-(bc4elJn2d%Yf(%OyIUj_9MAOeSHUOeWF+lb+8f9*>7a^?kqJ zg=9P)qgt(ss6s#?C=M@@fEAgnTu>khbLR88jK(`Uoeml;$)pkn{PB z-EJq5RTRnzOu#!q00000NkvXXu0mjf`2phs literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/piston_side.png b/src/main/java/phantom/texture/piston_side.png new file mode 100644 index 0000000000000000000000000000000000000000..634f54ab25ed749215befb3b51350355e89495ab GIT binary patch literal 604 zcmV-i0;BzjP)eI^O@xc9l$G5}_zNZ}cn)-}R!YW?Hsu2h3c{4hhPw1sAa%P;k!q03r z!_Qp|zb-lPv>($~s2Klg&luxEK&E!P{Z|4_#h%IOi7`%G+3)vgG#b)Y&G!NAv<0P* zQT|n|^(L+K`Vo~cc9eq_bl&7KPFyjY&9K>Q&}y|X7!0slt+3nea5x;$XfzU|8I4Am zOeR~5~cor84PN!3bLg040$v-ch&u1JC2dPdul#xs( z;qiE+3(iQ<>-8dGx7$hbU@(wMJd@~jI$<;#VLTqATrQ(hsR%K<76ML~hfb#>nrR#m z2_}A64WZs#u@NpCX+!V z5|J2-sDvymuRs>QZ>!b9@p!~~y%x_ZDiJ$bE|+qVv!Lgl_gDDWB2m`=7D(+fC0E!B>~6FD{v2W8bMyvh zw8fJ>_Sny3dqP>3v1yw4yj#ZoZe_AqFAVqqIzIW|9;5jWfh?X~ zY+@$ZSLQ)40*#q+DhPrpJFp7WS@3jok$_##k>5{3lM0NYZClGo(+F0hJTr;BjVbhf ze@dV+l7Khor2-O&1le`nX%Aq;sq*q?NP3^nsfkmJ`2_MkNmEdl^*)UdeX1Yw152Pq zQpdF@RK}KKBaw8!OsN7f_$AU=&C934xwu{Yf2MpBk=Tb}ID5AU(r40lrkwZf+(5Y? iedj+WfKT`IoqqvBCv-}#i5;l`0000kw%Tx zm>RonyXn4a;!_zal== z8GHY9e30f$jYTY}zK$ z%DCX&6uZ=u89Y{U`WlSF49xuMPX*Ox8TU@_Ab(d1u1gePIJ zF$_QfYa=}x(TM@7AD@a`J5fe^LKx`I68ED4!P>?Y(woy*SvH00ntBtfG4sDk85~8o z+m(ok{1leGpkzGwR`9dFZ64$0-#zSp$oW&^6#D)CD1aWL_q%}1mlZgwgkn97axE{l z=T%vEm5h^09xX_+UavRWgLv?QbbaU0lCC?7Cc(GHx^f_WYw5B;FO}cK!(Tg+g^fE8 zPmPqF*NxM1vLz${8^Rwh2A8D#Gly&~j%?MEhEm5R;=k5&#FR+@b~3qfRThYJ6A!K- z6bm4dm_*9DG+L^VS~l167mN1J+}IfdMyxg~*!}!SA`{Fk3uXu8%l#n8M6+_PkDnbA zYtsv&kB9QXU?95lj)Z?q`kYB8XO9VZV1$3pDicASw$tbQ4~JNTGrp2%#Q*>R07*qo IM6N<$f_ZEp2mk;8 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/planks_acacia.png b/src/main/java/phantom/texture/planks_acacia.png new file mode 100644 index 0000000000000000000000000000000000000000..6858c511972b5a6702f06c45e3eb1fc00ed98e40 GIT binary patch literal 452 zcmV;#0XzPQP)5z$c7(egq(BM(7GO@op&M6)HCH0hFidzG*Dj@PI`R-RSi3H2}cGWA?eVV12VYP8mEs%qNYjt%dGH zm50)Im4g-_fOKskPV?YKEEiNkryQboLIvxT3$1FXKi(w+$1ifqgH02Fa2NIKo^;rwXY*C!LWc6yZq0Js(c uI~M`$aoZ7gE@Epv>n`kJ{0OZCGx!6OEXC%Gc#q)#0000~G=tfl|}0Ygbd zK~y-)b(6tv!ypWX|A0xOl1XW#Y3kHTyY4XUIrjdqP-(Yrhf<{hlN};lNK>C6#@PSI zpX&STWpblO9=0|B0FDtuVA(IjjUFl$G^Fu+_Gn0hV}u($hQM;rjb6TUjB*L3#Sj>~ z)<{u98UXO~H{j53WuoOY)yHc)$!)sAqX;||`*fDxpDi9SaHEH&|^ZOMn1y=(pe)#YicVjJ$?yZB{#!ux4NEJ6%8>0)vjH3j$A~Dc4&1!ms968LYkk zt~D}A&ViE7q%Sv;{3qRQ4!r1vmP;?u8EkKvxy6VFtP(g=>g+ gUT{~2-DqL(4-y*2*v??2PXGV_07*qoM6N<$fw4Ep5bQqf8JkFJ#2HJu5nIdi@ zz0F*JV}UkelnpqV2Einx#nEfh)xbl$c|R~UGlg*8bco}if%VS^L5G$v7`XuWMO^>+ zp{W6AU<%NLZCs`Rp3#_Kq?QLX7QTh50B+^F8y_gH$3@|Xf6sqE&Wr|Mm2mO0=2tdw P00000NkvXXu0mjfW65-m literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/planks_jungle.png b/src/main/java/phantom/texture/planks_jungle.png new file mode 100644 index 0000000000000000000000000000000000000000..e3fe82d16549255c0b3f8be7eb306e8d3cee1209 GIT binary patch literal 263 zcmV+i0r>ujP)(u}N N002ovPDHLkV1jt8Z&m;R literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/planks_oak.png b/src/main/java/phantom/texture/planks_oak.png new file mode 100644 index 0000000000000000000000000000000000000000..346f77dc1f93d46f238292e8714ef0c92433325b GIT binary patch literal 247 zcmVT3Dox3KvB)duN`J}|W~1vPJeq-Zo6s0!6yWI+x56xVv&&z*!RpcOTy xo*qah|Am}@m#W+Y$74GF_~D-UpAJLNUWUc@J literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/planks_spruce.png b/src/main/java/phantom/texture/planks_spruce.png new file mode 100644 index 0000000000000000000000000000000000000000..f45fa94b0bc1eba667981a4a5aa0610868389164 GIT binary patch literal 254 zcmVJfw6Ds$j^(6bk*6h!*EKPIJWQ3mCt)v=czZ) zGsW^8%(sW$2?xJ!hu?~a9yr&vNDu`hDHka^xSn<^a39+g9LKRz(*S#%KQ8;NGjt=h zOQw=(Bg`q{$OR%NB;)8cscPV%)%-j#HRD3$H$RGK6dFVovbper3iw4_|II_Hf%jhn zxfA08T8V6`>49Y7zu*(_P^ELAn9kkC4|~slJT^vyFWiOWr%Wx}h5!Hn07*qoM6N<$ Eg5?fu2><{9 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/portal.png b/src/main/java/phantom/texture/portal.png new file mode 100644 index 0000000000000000000000000000000000000000..96859e2df927262f0ad01425e307eb0d4b0b3aee GIT binary patch literal 14166 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 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/potatoes_stage_0.png b/src/main/java/phantom/texture/potatoes_stage_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ef732040074d2e35033fa265cf5933169ec0df GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`#-1*YAr-fh6C_v{Cx~2Nd?WDR zf6pU#rWsw=lMEk7=sADy_?vz}Md=xy~0{%OFvQS*ozo7sZd z;-N|HKk9cZwD{YXW33@@@n~5`vQz=j$%K>xv(EmSpDD(_$~U{Q>tZaM3BwYx)!Y+Q l9g-64cD;3Ao*2u(5OOTJgkgQfTA*tfJYD@<);T3K0RUipLb(6{ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/potatoes_stage_3.png b/src/main/java/phantom/texture/potatoes_stage_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e8185d86daa2933eaacfe2f9fab976da057c3d GIT binary patch literal 236 zcmVt^a`OT7_pj=r10000Px#24YJ`L;xiKIRKKy**AOu000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^q` z4gwp_)QNNe00SsVL_t(I%LT#7a@%wOz~P_%lDBNm;@EK#*RkUy%{HVkOsCv|Qid|a z3|CIP3kP0+7vRQ$87>qKg(=$sCeWrNjd9|{t`l35wOE#HNtXCN>5He|#_q_2ctUk~ zg?i_jx$F|7aKaBiKH;-ZKE?1{T+gF8KS#UU10i!z+Th7=KcP&?A;-<5RnuKuGB8FkZIg>@LY?^`WoLn`;JlHL>Pw7=4zRisnO`%a!`8%{E$|+ zO*)gNrK%t&K~5k6$&^I<=7Q>a5lIq=2?NeF<31L~hbN@d5VSt!Pr+9vT z%F)gqvq8kf^Z4+i$BYpqtZJp22YTz-W}D2#?feBZ_Q$Gmy(2+wl(r~ZmswL%p7NM9fS8aK5b=baAS>kE$d z_BmG@Oi2-5s1QU7`;{6H(>y(A@8}5E_c?1_&}}pky64av4nUF^xh{!Jg4$}Ct@R3p z+%!|^6kXHC7(2Y~cM-9`4gyw}R{#*IX;43Z#ddLprG*?s5#51~9|g>2rm2 zZ4yNh5}*LQI6Gy3XPdsRQ7#k-iMVwvRKq5ULZbMV`Nc)z7}{nZ%g_PXSY1Q<{HrhH z7yq6h$pQ$O%`W2D4ss$v=m!AIX6LXpoz3zF0GI6+mGu(3>+nBIj-s3ub9?6i0000< KMNUMnLSTY0rm!0T literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/prismarine_dark.png b/src/main/java/phantom/texture/prismarine_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..07bed857b00a51c7169a011dea51235fcf7e601b GIT binary patch literal 867 zcmV-p1DyPcP)Px#24YJ`L;xiKIRKKy**AOu000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^q` z4+Aj`wj0y{00QGlL_t(I%LT#NZsSw{fZ_kxCw7*muA7ClWoC-dun2(!NW2AiT=D>j zd!BP{kVc)B(v;e9yx02@`|y3@*FS$(P1~Z>fb36nz}dM)cN$2ZUwHS!chq@F-PBN* zD18E&&dry%_zw?g#$+T-BjnkFD9aFlt(d#|aTqN6bzB{_uf= z>!M|G%IdQXd6bgHIomh4s9_)v0!(8<;sz+8gOmtBNEH38MNkWp9bbUkLHjH&k?D%A!Pv4D*-~ReT=~AaiUMYhJ^TOiPH|*Z5 zIefflvb2%LoU^q>^t4A!rYz2vG*w9zCunlI!1V&$V~FD&vDP+*ZF6_G$8iG;L!sLX z;_Q`!AEN0RS*PgalsGMr!SfSxzC_B3rM09fO42lA7&L@oqG<+)rx&`erKu{$aiC68 zW|l?Uw#c!paUb^xsnOLf+Nmc@a?Gj8?A)fVd)hLmP75wKD@4~av@ zykB1sI5Ewrh>s!WVu2qgoK8Jmma`cZNnRsnK5>#D?du)FvUqiTlDZ=GV}w4?6(LQP z(KI!eyDb3Ge$Q-qj=9+qI0v%y6?yo0N1T^*Rl_j!v{?p1F=~p%+@MKfvS$xrLR;3% z5M=!bY5+ir`5a5r`23fj@b2$HYOLo|&a5fne=e&pzCtmf@;&^gXRg2hmQ6P@bS>Ve zd*rF9G3^!3vqN}{*j{aL{0Q8Ep(r@BBhm(jVI(eVZb!w@J))E%Ofxh9_i2xu8dOEj z`ud9X?wZ;1g1SDD=PhX%GoDT;1xXZBmIYN+Vs9>yv>inl@fb&d;_&GK=MbRjI^#H! tA49sXCwXyLUu~f($vltMc1=~*{0~}Q!*tZW(<%S}002ovPDHLkV1mUbj~oC1 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/prismarine_rough.png b/src/main/java/phantom/texture/prismarine_rough.png new file mode 100644 index 0000000000000000000000000000000000000000..fe133e294841a56f396ba17d097930006919b754 GIT binary patch literal 3378 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 QzyJUM07*qoM6N<$f_k>W^#A|> literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/pumpkin_side.png b/src/main/java/phantom/texture/pumpkin_side.png new file mode 100644 index 0000000000000000000000000000000000000000..75dfc47553b2803a6cc757d94bc2e01c7477c940 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`i#%N%Ln>}foxD-7L4n8h^6gtz z6QwP>oh_QCe%`^{tniUX+>SG$(f!k5=6#Lla=UEa)%I2OZCox`e`xEm0-c==&ux|j zBwaCfnB+8->Euh^0Bwe<(_zURb)={?M0)8T|Db_TD=lm$9wrVPjN-Rj*y*`ge?>IU&bB Tmj-?Wx|YGy)z4*}Q$iB}Kr2{0 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/pumpkin_stem_connected.png b/src/main/java/phantom/texture/pumpkin_stem_connected.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5c10e12568865928cc9c1653a171dc3768ad68 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar-fh6C_xh8D#8ge%N!g zx3v6GKix2I-n{=OBvK?c)nsSCuAjuqvXiaFah7M<%_}Q|AFfl3{CsU~^ut*RZ6czg zf7PuU*2nMno5`4de%@dE%1JeI}Mdu3Z^MN zui=ZxzOSsgG=1gPZR{2A6MGIyF!yZSYy6J?%RR-VH4ICyRA;PZJ!k2qS*_XEXsJG@ nI6YO!>5t%!-wqr<#eOh$XeEA_WD{l!bPt24tDnm{r-UW|fh|Z^ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/pumpkin_top.png b/src/main/java/phantom/texture/pumpkin_top.png new file mode 100644 index 0000000000000000000000000000000000000000..297ce3c8244854ca04ddba535f299227261746ad GIT binary patch literal 272 zcmV+r0q_2aP)M|?P>QftWkJ9n@DV`dO5`el zF?c}$c$qC?q$2k~EJWek+UNcw(PCC=+z^m>kryk8HnTTTZ9oM`M)LD9k`1<^y00D$aL_t(I%WadvZW}QSL?0#6Yq$aW z|9{tGfgFk!iMuO_WDe^nUOPNV8j&21M)LamS0VzLxH~>N=gSKK5l(L#qcz++0HsuH zIa8|wpqU^7h@h&NodC#i1R#>kpp*)LE$1C45fL;Ago=nDQn-({u7~|6Gl0E1=xB|q zhMktf<;?s(@h*9^hVCr=fcL%;eef818*lW+=xslfdZhjD&+A-YUVc6$->*Fer52sQ zc72~>eb@Q%tQMsJEX#%M`aZ$WBG|@XN%jL(O+?D8qZM*I?d#9Qmim06k zciaahBN@F<&}@0?=6Co#ql`e^I|T*oaA{dCPerO3Y9}&-w*J5QU^Gk$y={mT)QqA^ zj6pS00GcRL_t(I%YBpGa^f%yg+B+^BoH7# zVRi>D_x)dL+l%tkBqYI(6YyRnap?}zb7OlXA4x}&$kPu;59b_3erB=Ukf%rH$t#!a z#B`QW6&cfb0SJO1K!^YUdC5)y*jf)f-0%1PyaCYE23u=vtx@C1`{5iCAf7J~tUw4J zacf$Ck7rAy3jJFERgrcC)`b1k!P0q)Kr>}2hSg^09o0DU*{rvF09tF&y6Czvunl!TqIu{{o*sDyISBViq|3`w z=SiISa%x@CT7$ggCw_vhHP)D3xa=EQYfYEIYO|xUhL^t2Lk3bR{~?NIMDd))8qS9| zqRH&5gh8-J@c@Ee`9ZKKp8Hl0Q!1x%LfbYJ`N^la+Uz00Fm2L_t(I%XO36ZsITyhCe3;HeJ|+ zjgX2~>ia)frB!JII45H#w)Y~5TUK;#ELr1!{=-Wi4|K==6k^~_V z03<+t{a7&AOGCBzMZ^Onx+8!Dh~8r zjojtG8E5l=D5Y=fhYy#kukVwDMxEp3qP=hHyXOBNFH)Q92ST0SLLe|&J4NY+*@G$F z)$C82rc|fb&jjXyvQ{5hqvIt&mhBkF2{1T^NK>416y-63Ip+x8BX@a;b1u?+WaI)e z$-CakmDTC>VT@9)0noa+1G7d`9{w7Ml|Mb$O2rw!8hzaz!G9i1b4U6y-5W@qXGy?_BIzZ!)aC z&9KSD0KnY(c|sN4UTXPBMt7{&KR_f1A<$ietW|~hlKbMcHJWDrrG2Lu#{uugI2k|) Z_y_tg2D`Oyhsgi{002ovPDHLkV1hjU^!ES& literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/quartz_block_lines.png b/src/main/java/phantom/texture/quartz_block_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..184ecd2565d6eefdcf8560ec7e3d85c389e358ce GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(``B7r`uOHr(J84F=^X=#;Hi{io|0R$CW!~JncDlp-wwPZPK}7_ru0cR)3iNr^s|H zNf%lCV9#8=^)sVo9nUDOOf8y{niOuU)o3KTdX^5~>bWwj4hSrY(=fl-7WKxvNJ3|E jPrYH24eu%2Qw!|vnk%|8wE8vx1AxKP)z4*}Q$iB}tI>#b literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/quartz_block_lines_top.png b/src/main/java/phantom/texture/quartz_block_lines_top.png new file mode 100644 index 0000000000000000000000000000000000000000..6d20379303b943cd3ab791f1726ce5b3227922d4 GIT binary patch literal 503 zcmV00EatL_t(I%YBpER@*QTMfXUGZJ-50 zF1^t9|38Kg=u2Pf1&e?wixNU2OPW5|QE;Hli+!v)N5^xKUq3H&`sq6W&7uZi_W1_@ zx7WV`7*D@|D))ES08D1*h!~oi8hN;1=+ol^05P_R2*$XKRTbw709wCBjLA3#PnQWC z9(@FnEkrdD+mM9-%9BYx-#kBYJf7j2MNLs249NT8ifVwR7i|`G=Rj5S;cEGp_u}xw zF)>C|Qzt%|pR-y%4w8!gMlmLTv(9C4Yc0-|02pDH6ui&xF$Odx5Wzb4rkj)T9Mjy? zq!b2Z01+X^Z4u)u^0o$MSEvG46fe5a)kS-9+#H!3PXcDoST&Xy6u_REq|Hw*T~GVRE4I+7xH%|8O-+GlLSyej|z002ovPDHLkV1jvA+Y00BcuL_t(I%XO2{mJ~4vL@y-MuK)j) zK6rFj&#v1YC?C?vWO|gR1VT}e!d`!T6Q@Z+5~Y;oo@6FyJTu%KGY6moWX8b2%*jlo z1R#z^#4+RLb|WJ&bKZab>;N6tz>L-6Xb<v9Z(TiDGwl}6f(PJT<8*f{taCijQ0X65-5SkK5N~cK&+HL4~f=} zyAC7~(E#hiDZLFJl18vdytSjNcjzE9G3g`)ZjNpL7FOFo&te_Aj)|{gGWYAq5t@5) zx&Xf`(agG2NyMVMc90Pd3x_%Gy>NYd{f?chJJ+@Nteh#}Dr=ug{0lO~&?!C)rIr8y N002ovPDHLkV1i(qwVMC{ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/quartz_block_top.png b/src/main/java/phantom/texture/quartz_block_top.png new file mode 100644 index 0000000000000000000000000000000000000000..a2cd2cabf5c98f2132601c70cfc871e13476f3e2 GIT binary patch literal 419 zcmV;U0bKrxP)00BcuL_t(I%XO2{mJ~4vL@y-MuK)j) zK6rFj&#v1YC?C?vWO|gR1VT}e!d`!T6Q@Z+5~Y;oo@6FyJTu%KGY6moWX8b2%*jlo z1R#z^#4+RLb|WJ&bKZab>;N6tz>L-6Xb<v9Z(TiDGwl}6f(PJT<8*f{taCijQ0X65-5SkK5N~cK&+HL4~f=} zyAC7~(E#hiDZLFJl18vdytSjNcjzE9G3g`)ZjNpL7FOFo&te_Aj)|{gGWYAq5t@5) zx&Xf`(agG2NyMVMc90Pd3x_%Gy>NYd{f?chJJ+@Nteh#}Dr=ug{0lO~&?!C)rIr8y N002ovPDHLkV1i(qwVMC{ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/quartz_ore.png b/src/main/java/phantom/texture/quartz_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..4d758c12115a4a3a5bb68a23b75aba01826adada GIT binary patch literal 1018 zcmV00WvyL_t(I%PrFVPm~1!!13=L&&3_k z2{PhMy5k2RFc21pyvTS9l|g|}DM*1th_+RX)|$+;#hNc=&SWn7!N3fyEu{uda0HDZ z5%Mk}L3nUHb$D=fC){y&@brs+!{;OW<8FrpaHOz|lH_Ebd*K;c+sBzRnQ%!G06I}5 zt*Q!xC^BR)FukoqDd=tgW3M(!b2kV=N3kl)MAELE z)Vy0qs3@YA%h5yxV>F1w?o2{xXue5&a0uRE5q#6zOKfm3I#DE`APYaU5nWz3_a`6V za5w9Uq>&O<2KiJ_oTbOKbd94v~_f|D|tIJeSKWN`~!2#D>OHrXMaTr z4kWDR{}>({=Fzf?mZc>u77K!>B(d&v;;#+i?D=}$E~{b2WJ0Y{(L2(I#bjixqZ1Fg zg3DKbWV>%54~#~xUHqK7qcsSD2?+p9Oib}b{W+==6N$~qBp@q;4c7+0+-Rqz{WgZV zd5YuXxivb%x3^m{>Hi{Bp+MN!+~l*)P9n$0DY962+Q)-{%ru<#HNHN3hM8HBICl?% zH5%|x(%Rn*(k5=JPV7-y1hrC0@)LK{;}s$+N-+JsfO%d|NB014B<|q1ds8H*$DoN! zVBNOH#=-(+hYq8aB!rR0MWPoM5$z9&DL>5Y@IAh~as$JkbL>R0%>k;Jf+hi_-xsNM`{8wukFV$Il=V91?~@xksTIB@5~JK$7+d8N#U{c zG=l>}GQNimtWik{`{;#aAa^iR`5m_0eCuR_|x<-^% z%Z|uMGLMu~S@srjAt4A#g@ReDmE_P+swQ<#=Zt;(^b07*qoM6N<$f<1&r=-q*fImR3Tq)(|$elV_TGL8xB}Glv>F8|Plx?Arr77~d zI6J%WBM#rY_j$i>@AG{6K2VdUX;M)Xc^nS#osPo+6h)Dmrb(yf1z24etrt`^FQ zxk37a?f85?tm_KN^#fEjPe`$Ss|%xYdE-!c0nRcdf+O}t7PtqR3Kc4kPXLt4FJyr- z5UPE2mMHueGVcC zOFYCZlDfgBZu~6=*$?MCv*JDn09Us+GQO5{w+kYbqflt3`ub9@f5pJ-%riZY1lS7) m#E_cDOjuv8^OkA*90u?DXyqEBbugp=0000}kKGq4?xN;OP4e2$}XjYhW&9=?gHtI0g%T$XZLVhV1E&%m*wyn5RMgZ@5Y zttEE(Yqk4#kWI!!Ej(Z-Gs)tkn_??1hqG>P3{Z8B8+9V(8Ux)jxVJE@ZoMc$&h=O8 gcb<>1=(RKW2m7W1B?nba7ytkO07*qoM6N<$f@j|9^Z)<= literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/rail_detector.png b/src/main/java/phantom/texture/rail_detector.png new file mode 100644 index 0000000000000000000000000000000000000000..92c1466eca4e2e0b3ef70eee0a479ec6137c5da7 GIT binary patch literal 309 zcmV-50m}Y~P)Jb>3DR(4)29EMmM!~#V(;Gn{S_5p1Bng;kgXt%D^{!k%; zuuF&z1CR?qw!;jlEi44Pis&!^ITz$?kVcU0ZK)|>1BgloAb&`K5(tU2Q{{LtPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*e% z2^lC0(sH{100G5GL_t(I%Z-!4OB7KY$3Jg&gDn-*+_@wwNJvBwDjBhn5JZArf`Ww* zJUNH`1G`&`@Q#m z@ArA%FZ>SEG{rCsAtDUJ5YsgMeQ|)9=}~{-^~8NiwqIkYKM6o0kpLij=&)aO{EKF$ zN9FDNH5CWg+%3}oxSlB4XH=^{aela=%0;_|>%qXy`h0V@_~!)+pTDXXQwYGymv5?B z3j>2srEvy83ntt5_M;G7+N1r=Ad^nXmeOQPX)=o@^D!m!F(tETl1Zl|$iQzQ$Y48H zVng8G2g97Gj_U`)Rc-R@bwtB_?6Yya?jAM- zR@bvWpDP(O!o5&WCLJgAWa~fVSHo* zF#Jc60mxwhQUuZj@;Au;eZ@9lZ+N450cRL|J);ZuFUa4~ZmM9-AQ~hFk|P)fAVs*m zfNTKHFhDi{q*;U1FaQ}4!UPEekpDp#lpeg%yg*VIfG}CV1% oh)xF}17Km08>~-y7?7Hs0k+qDqJG029smFU07*qoM6N<$g3PmRj{pDw literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/rail_golden_powered.png b/src/main/java/phantom/texture/rail_golden_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..bd343be8039ac5b8d6893d5db920f0eb036678ee GIT binary patch literal 341 zcmV-b0jmCqP)F4X|3V|V|0(`jVC-Y73Kj#&!3+TDL2(7L0WdL; ztqT~K;Cy5QF#Lzj0FY*o%>)fV4g-)Pkj?G6uK(9`1pV(Tw)tOgqW~5|HUMWBd_JfJ zwiV>>3R4+y7=UPy7)Xv_7=RSP#3nJIh5@nxIKu$h0J6dWWB|y&ptuM5AB5K@T7bon zT|h7la`j~XN4u$l!vGYBWTgX;7eF?Xoen^@PC^PqlJWv53_$4sgy)Cr5}yu02Ef7~ nH&~zaFaQ~VGdlybI=UACC((&L9FaP600000NkvXXu0mjfd@6@^ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/rail_normal.png b/src/main/java/phantom/texture/rail_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..d609236933257ad59daaedbcc92efe47f8a21426 GIT binary patch literal 232 zcmVP)}1CoE9U@G1XsKRoC2 z{2b<{Ii~;gBR8?I3a^!1rl_pU%sP3^#fv^)>wDH8tZ%AowG_XrCLbMo=wZVe$ymLk z@vrSqFg2ZH%Ve_@ot>-TT(FDjX4-^9-(tdfj#k7rzAKrLl)`JltMDX0WxC7ml})kj zrdKxZO+CY_U1gGPZ&I1{an^LB{Ts5+-hC% literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/red_sand.png b/src/main/java/phantom/texture/red_sand.png new file mode 100644 index 0000000000000000000000000000000000000000..b216a421a8da727815b0396bd09b6b8f10e78613 GIT binary patch literal 3455 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 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/red_sandstone_bottom.png b/src/main/java/phantom/texture/red_sandstone_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..7e7a8c9055d176a474b2e63863c9fe7831fab89a GIT binary patch literal 728 zcmV;}0w?{6P)-ByChLCfE}*JT z%fJ8pNcTB%^Pbsz9-E4JiPTo}a%tJR0;d&AObGDS4IC;*CISg`i16O`d@UVWZaB3a zTU+okcmRwNmY5hrLJ4e&f^#`EQLsN3R-q8RtCC>f8)3yQNcx~A`hgL!&kqIbKoUT1j+XlZZ%puWOi>|fiXSa&) z^Fkt0S;MB#0K9cQxiNn%H-xy500C^K(2)c{J9$JDf&vy^E-e6$o02)KE|1ritu0VW zm_j5|g8CRnzEutpq0TcBk^kqfrs8z#i7An5p|+MGE_5MqD0A9rL_cmyPPaANuW_WC z*7mF1a+|_RA`?=AQY%U_tQL;fmcO?Zx}6s4+;Y6O97;!18${qddP=Q1ILGUKrL%XA zrcnHMx%0Jj+@^rel#nTylVJ=Iv_gq6`2`~iXEQd1B`k?w!@zYEa%0FcK_x*gF>&rj zifk2X5i$WGQfNhp2_-`BXP$Qr`_jQ53PuU4ou+l+a;jXI<4WbRDLMB8Q%HO%%xAGF z!R$RDu665&s^oMZnZ4(GQ_+Q)F04mQVM!_Sa%p+qHMH|8e5f6-_kr9Pv{JCQhN3P$ z+3(8|F`9Efuq`aPG2EtrAQW2hdS9sxKA-@Sz{lu$-mR~k3HW7=GAxnVd+t6U!l$^K z14=-Hu*8T_!po)Q;2cH?Q3(J$YY0XYQ{ufF*g3}-7L*cnCj17TjXP4FP?lr>0000< KMNUMnLSTZG5jUOy literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/red_sandstone_carved.png b/src/main/java/phantom/texture/red_sandstone_carved.png new file mode 100644 index 0000000000000000000000000000000000000000..41070da4bee26ef1466bc69bb0ebf5bbd4ccdc13 GIT binary patch literal 655 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 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/redstone_dust_cross.png b/src/main/java/phantom/texture/redstone_dust_cross.png new file mode 100644 index 0000000000000000000000000000000000000000..dcec893530e083bc05aafe5c52c1c61fa1e10e2a GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`nVv3=Ar-fd1|8&NFytuy&pY>^ z?3;=13L;CwYeNKTZ)jo*FNFn3{M-Fj{1fovw$E&VHXW7|!wo*EvM|G<8mh@Yb^91_` Ppg9blu6{1-oD!Mq|Kvlw?E{-7<{>c)oixWh8m<$pUfW`|jFfMngNd`(Yc)I$ztaD0e0s#D; BC$j(m literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/redstone_lamp_off.png b/src/main/java/phantom/texture/redstone_lamp_off.png new file mode 100644 index 0000000000000000000000000000000000000000..522765beb5b1343b8d44a04455f62a7e29584ccf GIT binary patch literal 616 zcmV-u0+;=XP)2Wf1 z#DtWi5)&2_0rjkmH~JOUW_NdW03h?bY6M3a5qVQcW^GNv$t@YDrA5{P=^}G>2B7#+ z*9HI*G;%V0Q)A4mXA@|uA$)sWz{f{u8xtCyO zicb%-IKH_EuP`>E<$&SPqHgqFsQCOKg%9_xqj#*EQ9`#G#-?ZTubp6kaxMn-s>jT3 z=b!Co!@%3SaeUvu!2p(-W<>8P5eKA{S+q+593@4p^dVcyd1j(^(#jlrw!c1)gXCqr zDk$je1coZ`UV!0uqJ1ZZu9=mlP0yEvGst=z{V#A1t&$(ThROi7#83q!>g#$n3M0KXa)wAA3}Dih=|?Pg{Q&0HY9%DFgt&vew1ZnVomUKL+u zOGqz@0T-$<8O8oWSwn4A!pKMy$S(<_KhyvI&c6Y32aAndQKl9E00007=PjV+3j403MF{S#s8#){@PCm)M?P?oHR20f(Ps4aE!xim`1VOfZ4 z8U#_0glHDcg|G(^7sL#8^mvYL#N$4_HCnw9{S*Z|L!^Gp5M8@%R5?m0A!p# z&PVS3U!xGqBe!Oyh<+Gq_8=K(!Or{;d{!9;9CWth=d>NRrgCfr^eE);av+uw;+;p1 z&CnRqn^D{_2{;fD*c#U(bW;KL{4p@KrJNJ$z$n^_#XcqGoMK9j^s8VNmvIhsr*>m~ zM2qPzG05dL3*l)M&a+l&UcjcW!ne^gn0H9gCeH4$%XkRmm#Y!Z1Zme-(|^yd z)?n5tp@Jk#PQYuf#1JFEOGhmgA!(EUja4PMqRCpd)a}Q{hz7AcYQ*j~Va6fJ3t(lG zT3zUqQ|sxEc*s0;N6vF_L5_4PWWBZELPiuiqfaVsMh#GG4-&;C|walk6)TG`i? z$z*McuKG1YB=beBoCDgm<>+CKVA!Ujty*}P;u8kgH5G836BHk&|2@us0DfWyw@uCh QbpQYW07*qoM6N<$g6nWOVgLXD literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/redstone_ore.png b/src/main/java/phantom/texture/redstone_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..575a48880e3c4675e008b6220835e33fc99d0bab GIT binary patch literal 264 zcmV+j0r&oiP)^x3t(_s}?qQ{r_^$E{j}~M@ zqWS=24gLiHf<*mnTi1mkEV|7ihrY2p0|aEUKgpSXH-ge#*=#&CGDTCG=f3~qNYogN zERASzuH%R#%m{OtmHxm$JFn>Lk~3q|%~JEcb+B5=Y;T>Tkklvg4u`}$P*q4@yXx4c zmqj+}YZ32aSmK-h7=wFIb%sMiKrc^$JryalzcS87=}vj3`D|Ia0b^f_#agI|ftkAi O0000+tSf52bs^Dc{n82?rv|opR8_+fePgg&ebxsLQ E02a+VdjJ3c literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/redstone_torch_on.png b/src/main/java/phantom/texture/redstone_torch_on.png new file mode 100644 index 0000000000000000000000000000000000000000..2983d6ce0ad09586259ccc4a7795471d950fd626 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>7Fi*Ar-fh6C_x-u+~dT{A)J2 zIqUy@hDUWqyo}Nx>VMS>EI1+h`s7s}rpev0|8BoHJt6kv74tYMPK`bn*kT%aJ}aHP*d~;w5Uk~-6@S03$RB=~6S=lIJ jpIj_>^JRlp90NmWN<(Of-Lx*CV;DSL{an^LB{Ts5=KDWb literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/repeater_off.png b/src/main/java/phantom/texture/repeater_off.png new file mode 100644 index 0000000000000000000000000000000000000000..8634669840486cb9d17fe168331fbdd18410ada4 GIT binary patch literal 375 zcmV--0f_#IP)a#U1!i;-}jEHs(k&=&h(k4Da`YH7UMW(=i~9{_JT;9K$kKU(ml>vaUz)3sDKMV zl=MC&1sMU605t&T(o=m*dF&<1p>10?5Spe5%d%ujq|z10KqPwt;pNi8tC>ez*EK6P z*&8$-5n*0*Xg1;v6U+3P*GZ9yjM3D>DU<#5Rg0m5-6m55*sW57+5CD`qxG zj4cGiFogS}3|CtkK9QTVBB$;2B2t5NNa!_%5|EwRxq|%@<@tVneEI}}{c~mxegG3s Vyiw%7u*CoX002ovPDHLkV1idVr7r*g literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/repeater_on.png b/src/main/java/phantom/texture/repeater_on.png new file mode 100644 index 0000000000000000000000000000000000000000..d71d0d93d78d1de0768cac65d95192e111d75879 GIT binary patch literal 371 zcmV-(0gV2MP)&KQ3}R!VRWL9bS?g8py2b822s+hu01oQqSu_ehsVCS~`#n^v zyo`P;j9>jY%Gn9cG>LL4Zq6)Lha7 zr?LR!!~?tN!-wUE8u+cqB~aH{!)0StY({sUK%F;&Qb6>7Po7R?O`f^LI5G*Bkt)p8 z9OC`%KswcrELPt;b0+726wx zWq5IJtxD2VVdn!99xYHI8+rQO4S8>tLNGHk=;^GKqZKrZO9=TM;6f*#_%tMHOk+}* zt~JhQ=!U-UGFe08A92vP(e3#!^8Ggq_6%TXT+Zur4 z7P5%Gzg=!hNcogr;i?~zkB^av4&8%!rHS%Mm`jdG9;#slBu#GQ*6JfEA_D<$x(AZ@ zk1O{+&~DrI-%o8FrR1!87c4zbQ_Ie3)J7qwKe%_`Oz*>S?3G@$MeJ=4{BKM}JyJ_> zMHy{7ARjpqz>v*M#N03$6oaHP-bAP9m+`Uwvkv?(SISL>@^r7I00000NkvXXu0mjf DJBUnr literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/sandstone_bottom.png b/src/main/java/phantom/texture/sandstone_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..e1022209c5106497c0c4ad79635c1f84cab802b2 GIT binary patch literal 638 zcmV-^0)hRBP)HPW4i)$%#M-aNrExkTzr@p$+och4N4j0|Mn6nlRrw#21#pwr!ea!Rko zm^w2QWRRfM1^msRw)-Pw{uIu-2ajy-wl8*G55;>Zj9gH*WH)Xfc9dYdJcqq{DR=9( zgYEY-9P=9B@$?Qwq{&$lWL_QoGyf=y&yhXE-qT^NUclX`2&{hV^CO=lv_=Hfg~E=_ zLueTY%-0gc95g&I2ru@jVuLu*31CdzO`vc9JNeWbC*Z{ins$!aoE#~@s;l(Y1M(Td z{HDTL^`NkkTL|ruAozbPV0)FkZQEf~d#(Ogjc{;G=WPrBA~SK;?YW$bP)8nU#L0}7 zhKGD1_S1d=#kp5u-_?!@>0gEhs_2cN1m+NlJ#CXlRQj*uhgx3h-`%QExa8RFOMrFP zp(GPzu7)o+&!~b|LYlkj!Xz0vaQXSE_!iNe+U-*X>yA9IRJ;2ga$lD!*cKB?=1tHL z&8lQHY@DEs=X4&{BsP+j(To@#OM*jObK_FdMo!*&?4<=toVX+-BR2n_jIUajWg@9` zXMNTNC+>j8Sw$XB+xbu`>ZJ^f7DdQ%XtbSCt^2ksj*&A&Oe7bf)~Y6hR3*C1bwGqP zNiu&4K&8ywNx@b6Trcp(qXe_+`T(E_nmSHSwSyrFp^_mGB)iA;Tsrt}hj Y00`SPPCjF|a{vGU07*qoM6N<$g3b#sO#lD@ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/sandstone_carved.png b/src/main/java/phantom/texture/sandstone_carved.png new file mode 100644 index 0000000000000000000000000000000000000000..9bd7fa1422fc6a057bc8c00cb72b6a4b2cf83463 GIT binary patch literal 596 zcmV-a0;~OrP)mGxmS&o*J$%R=gR z-lM&}h=b-LI@TMOEprK0Ero64Irevwu+1c#-87%?HIfLtRRmx2IO?uIGL!^t5oFb$ zVYBoQ)p87*>Lb*Q$Iwf07)l%!WeR2aE;RWD%*r&(>MXS43{-g%()pZ@!iX^uE@7X1dg>N=KF-!&MQV$iD64r^_^unqC0)#9%@=boF&n< z7ZA82wvqZnKuJWfxO+d*Mbb6Hi zKLNE-(;uMp`8u~ml28|GBuQt*+_lI@ARkF4pmqHm6fPlLV`$Ub{^pNH2wUfw8*@Ao z-2vgin&WnDa~4%K&M}qJ6wdm^%LEim$?BI0@hV^N?B(@45s^}uz~SCICZqGdcwiBM zQn+<-DfgobqJ5i{rz2e?R@H>q$ZNJWaaW#LClk<9rOM-=OB%O{;A%`5C((y~6q4aa iLX7*vErm8!C*N literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/sandstone_normal.png b/src/main/java/phantom/texture/sandstone_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..1b79145ff09417564fca4b205abe6ca015153fb0 GIT binary patch literal 777 zcmV+k1NQuhP) z zG8<5GW`37a7UUAENJc)Rcxgl-WrUPn=ly)z2u-y^t9#I{?n8)(vnbF{xr^-8v86+YL2%k}p$?_6&IFCh9&K7lG$+*ZCc^%4BG`kJS%sWkL#<#X zqFspI7ZBv!52VkR7>UR{6I{^zs^mhe>cr`xfeE6dRa4nVP1->zvyNKnoNS0k zb33TyR?t$mkx4Ax`|n01Ff}A7((DbH1gi`oli%T!G4xd@szuwd?XnHU^cuvY5fax9 zRo+I(_Y!p)hejA9w#i2n)5}OkXZTbdow}3W%TP*Y#6vTr!2zOyafW#K48rg35gyQ# zcX3W3I&nWm#Q&V37l(Wkj6wUD3tRFQZaaR4&~G{@7{^?kj4t51?PRhC@$|x*ZkPp@ z^EMK99$i{@C}53>9YU8{)Cr2I6&|6KHk04hq2DySPEgKnQBIcmAMt3E?tz1BCULVC z2&vc?%Kj`g5=+m&lDFWB0#ujm2pmp8KOi2`)45Hp+t^B<^9coP0|C!d>VR6gZXePm zq41PVhy_0|g5#-|zD1?DfNE(0N2Pfj=uc7BAHz6$1LJrJ<-JAh>(8Lw-IPHDVi&i5 z$lq~=p)s$#pV7#K-z(s^n`ghIKM4i;c3Pfq2ko}={{m7;SgTyrHB)Q}VTGcu{RNk9jzuW$G(SR^X(^Pw7vO~EGI#Ur^{~*%W7yk? zCKz2A|N7~J<4LMm+>=dhF5PI?0p5>L>yC5Ii~_thj&B*ZHWvnzgB*4p1O*NRhlgSWy# z>Q0dz4D{I&Ww1cJ8zb0Wp-wE+v5nN5piM3QpCdiYaI9AN-G7E?;uWf3i7vTD9a>0s z2E4Tn??r?Aa)}}uBlD+--7$`ZjXE{(v%BMSkN55iL>bwtsYz_)2NT}wkc~Rr^(78J zu8_C`q`r>G)o^N-IJb9ba|b<#ovK@iE^|->CN~*;&k*f(WS+@k22m{$dm0gpad_2G z#Rg6_5yx{yE7}eratUv*p^T>7$ZZFm%~SFvEe`kDSVuFZPwJch2P_m~shbEkL*%}J zGMr+!{)Fw*1;U+6k1Xi@}q=QNl5z_XMnuQbK^_>?g!K{Y!v!B3LLO3YN=Oz39B}H4&`fe3z^8}}b!d_W1zWOVuC%El zixeFWpF?E92+?jpsJ1F7$g@jVs!^URT3e7_71R4-MJFDafqT5=D{3-=@HYd5v`T7` zcsd2M7%Um48TQnq&zJl@CaM94$N>*%(rc74-3tu}_xXZ{iJB(uO3AU$Z-|IPLR0Z? zvYD#ctv{m6ukq*j4d>=ob59{fm)q!-$5V8qlKBg?L=Y3Mv^Cs}ly&JrLgvj( z<~Y~4>SjuN#e4U_)H#Y<9h)j~l7HpT)xAiGtd17y3ZJVx@;B518N8B_{s%wfO2*QR R1ULWy002ovPDHLkV1k8lRDb{g literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/sapling_acacia.png b/src/main/java/phantom/texture/sapling_acacia.png new file mode 100644 index 0000000000000000000000000000000000000000..a1215cbc790c7b28b66534ea53744fb39a60d5de GIT binary patch literal 554 zcmV+_0@eMAP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY3Kb6`6^=0fs{jB2yh%hsR5;6> zlR;|}Q51#0m(EKkFUd^PMkWjd>_(9m%tCP?y6K`I=-!RnX3=$*q0A5H%7ub|pnpIF z5qCnN2vysa7)c~F1#4$$UfP-1=b|JuG)>gIy1aYNxtIISg$Z$Q{rcE?Y7#m1?&nw$ zG3s%p<{8gd1l78@bvJ{xlt;~|}*)^lo zxqf;(B);PUaFIN62WuN;iWs2zSKBnRlRO{kwX>Pm^`f)R~1wfpf0q`L}dU?9L!*u?bj z1OvavgGNpt1!nd=0*w%hrZdZMaa30`%na(|gm{%SC(W$Ta% z`LX|W#~lZSy65v$p6+((DLE-ok*VnVwd}1CnzwSkrw%9Jb~L` zmTqq4|H(NVo7jAV&;8#env~$&VZ@QPx@wt$L^BV=MFqnNjxIYHmIT~yV9pchP`mlx zpx0ozuq@w+F2^l?eJpoOS$G*W*)&-aC){_eaaQmR@@X(R$RyPA)b!@VM22F)K(>Q9 zZpT%Ya?W6zpzYx`^+Y54qRzhhFGpCoeJ1fXsH#OMOqx1z%if9uaSW0SNt2fdE{pW+ meY?NKMq5Ig;pYt=CI+iVohr||mNfu0p z{PR@L!hHnl1CrZ4RxUlHagxO~GoVkVZ{q#DaZz;u*=5=)Np-)TxKlB=JJPx#07*qoM6N<$g3R!9A^-pY literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/sapling_roofed_oak.png b/src/main/java/phantom/texture/sapling_roofed_oak.png new file mode 100644 index 0000000000000000000000000000000000000000..dcf5588c6ee4e13ebbe0aba8b57d36c2737ca617 GIT binary patch literal 579 zcmV-J0=)f+P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY3Kb6=8z@c5(EtDe)k#D_R5;6} zlTB+AQ51%sJ2Tj6Gnq^i?1-C22uKlvs0%mJm77ppB#SKEbtNuD|AGDqx2{^~qFG64 zu?r)jf}lh}q!`6e`jt*HooGJ%=yj3awv!1}@NDkAhjX5D&dWXUpC;7B$vaZ{{E{CD zy#DaAOuCj>D3pf-RM6|ys`ATYCz-6vr+3?t0wI8tcVy190mNoLDgF9)0KR;vhl)l3 zs{Nd2Q!kz->008|@|xW9I)`yN&z1m7sUQRq$J<|fy8*yK;^7!M&z3=}&GYmxX7x02 zYg9aV^fEfafS9PRRI<_`lXbBYrg(aDK5PbvfJ%pnj<{B&|!SSqPg=elr&TWWw&ok$$4XwSv}3xP6In0V|}9z zAnf=UXWbOBn90YPQ!Et9VL)+ln(F&4X(deY`N>y#buUJ{(_?IO1jEq9?>pyMnXBNJ ze4M<)#cPvCfa2mbD|3}2Sl5+8(`YmU3_}MH^X1y0;ArZxUF*-JX6yaoyJr+%060`}_X{`2!Gyy+#MZ RFPZ=V002ovPDHLkV1kS;2HpSw literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/sapling_spruce.png b/src/main/java/phantom/texture/sapling_spruce.png new file mode 100644 index 0000000000000000000000000000000000000000..5767d48b9af794da13888e7ef390af85487c0e79 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vpiiKLn>~aowSjw!GOnwRlKlN zIOb179#>t{?9KoG%THC0;arqix=A1?>Rr*!C9CRck7f3p-go5ugAHvSYIYNIisg4N z(_>ejzUrmjmd*qJb|!3k*Py7$bXk28=RF1nwKeSh%RVtiaOpgZWxQ^&N~=4fZbx!x zDYxD6%FM+XQj_#d*Nb^cXZY6aoob|eyF8EEU-TYd1$)ySE%_VeO$!3L^9})B$>8bg K=d#Wzp$Pz0I8fmL literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/sea_lantern.png b/src/main/java/phantom/texture/sea_lantern.png new file mode 100644 index 0000000000000000000000000000000000000000..4f08fd2dcf42e57bc5ca59b4f9cad9aaffc0d271 GIT binary patch literal 3033 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 R^RoZ|002ovPDHLkV1hI*ZR!93 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/snow.png b/src/main/java/phantom/texture/snow.png new file mode 100644 index 0000000000000000000000000000000000000000..5c146cd37c206de9167916ba96f78d17fd25a551 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`(>z@qLn?0d20QXK7;wD)zyIaj z(|vLmW?o4MHuLmQb6P0tEY|((%=?$eCHgNvm=sggd-0iMU{~aVlj~*}rf7zgnAdqZ z@A&vR{rhw$lTMbRFLuHjtz1w3g*ud&KM*NbIPvV&i|4Y7qXk3v+>O)FwK!N-5+xWO z5+!(7O~~h^MLaBGWEr&4}I;QJ-u_~ zF-;%tT=uXn5i|V^J&dM3su@!iB9Q!&u@ikcMOGvIRpqSc3X%-jtJdP4iS_-JGku(wvQx4w*_=SZ-SjRQA}s{Imb*epo*P+#(b z-PwS-UwVa8HzVh_Q6QOsWY~0eaHz8|;N!`lDG!)K?@)fTm=Y+@$e;vho zAr%9MonBi+q|e6PGJf8KB1N%)hit&kMCJEYy98@v8HIFAocTWLOLNXD^7FdsrU0mm zR!KCohz+QdS!7txwN)vM0#DeHML2VVfS-CERCH3spXo>W;2v}fdoa$>GBY$IkHK>~ zMPNlMny+_I*HbnAPoplrhHXJ4pb*>tK_)H4uy^(O;JrmX00000NkvXXu0mjfVO=R) literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/sponge.png b/src/main/java/phantom/texture/sponge.png new file mode 100644 index 0000000000000000000000000000000000000000..785070307df8fce829fc22307407cf907b79c02a GIT binary patch literal 953 zcmV;q14jIbP)Px#24YJ`L;yViVF0mJf#pR2000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^t= z2_y-TO%GTA00TKmL_t(I%LTz}Z&P&uz~SHjTzY!iuJ^TL47TpVASeO>l)wwWzzB)K zh*@HM=g08l2ut)8?G_W~5;B3|1kJh&yTlIMSZ}92J?%L?H=jqm*!V8=h8{i3B$rLF zwSC0(YvVYM27s=oFin%?@)nQ2`HX-V!)_Nf-XXB_NRDmuV*MRg<}z3V!F1^Y$<%q) z)(&X348rgOv6#og!W9M`htM;Sb(JSi+BiXgc>U-1p(5(oZVo*HAtpW=jk<}VK%uD9 z@5HdZ4uwLNXV13z{BDU$vjtAxH;`b6(N7T3e99}kd^iaZLS}L@$L8i4lB6J1n;?j? zw6w+i%2Zv|)vWocq`PX44Im8{L>Gta!9yYjjvqZPo!S_edV+tK(h@P;~HGv*Y zW7{56C7J!Igp|+}8YeQo=o62pxP5z`mf@00E5za&m2!cONSKp$F7`1;j zss~3%5jn=IzmAb*nS6GHO64CkO~)Ffz?FFX?G%zM@Vp_0+2pGS_lc(hoME3&<}M%^ z)53doAYq+*eG|{2c>fpH=s;V9^IZpCYiwLDX5Vsgc&3en3z2nxH6UUe|UZq z-&07Z3*5VZnR?x!TCH*8W*UUg#fuZHKHq13?G3GZ8}Y}>$DypM;5!t@q8!&ij~OgI zJ!5fkmUz5Kvvo!;8^sT78mB|1W~X?)@s?apMlMYzf4nrW;rlAOp1~TJ*pAE>cQUx1 zf@O7aoB-SO`042p*Kg#hpIMBbSFs%pDPOcH7RHeA`Q_(Vv>QVriiBkelF1}1EAMEx z9i*tl!h;DyFTk>nS+4AoPD_ZLy~R+_rQ1x=>Gui4km<=dADb>48%JEddXCY2p7*sn z+0g`1&Bt*xg3uuh6ePn4Xr3l{`KCs{Z%~>}u)A-NO~tr-XNJ*yo_f8_%v=^pm@NOg zOCcAc$RWP(Aog~C2pjD>mgS=Bg6d9#Tc6J0gf4Oza&BUbp=;s~+t_XbSpvfdkd=Vy b_A&nhRbrEKvf*eY00000NkvXXu0mjf42HYG literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/sponge_wet.png b/src/main/java/phantom/texture/sponge_wet.png new file mode 100644 index 0000000000000000000000000000000000000000..d024995f5ac994ffabbd5f111761c858de5d7fcf GIT binary patch literal 947 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 N002ovPDHLkV1j&OnPLC{ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/stone_granite.png b/src/main/java/phantom/texture/stone_granite.png new file mode 100644 index 0000000000000000000000000000000000000000..07c7af8510340de84a17817a332b182d99efae3c GIT binary patch literal 979 zcmV;^11$WBP)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*)2 z3@98AXLBn600UD=L_t(I%TOe8u{Gz(0A zVi1iOjWIJC#|uFdpK2Dvi-{p>j1Zk6dvFjz$x4tcZVN13H_FP^75cMfU0rL}*6ydh zgj>4$u(;@XJr5`6%ctr+ccz^7dsvIKg|VSQ=JWTFHrFGqEK^-$N2lbG^LcK^lI*Z= z0Kgy!R1~5U7z6>gFUb0J7RdTIb@Bv@vrz!P>Au7x@&MM*^7@#QD67h}jbmMl6MVX;Mn3uLU5Kd;;T3<(ac80=F;7fhH%R#5{>&CC!#f0HT=4Mkdhe^r(71eZOop zTfkx^?e{RgRN^U~0W;Ru8X=^(`;_f(VIiDvTkMS>y(n1D+C-%I& z25QQS!pm6#8d1hwfs71++DA@sU`+~f3@G#y;jB8hZMU?Ce1*eFn z7wCBJO*+5*2~o1s;@Ci3e#lj?A5Bf|W|yc^0GLb76AlLW>~j}eEqc0djPv2)y=dVi{{^hiw$kIrZhRDn!$Gp7#ktW2D@jPH~aqhp9fg1$nhB7NR013X$N4`>tk#-wQ6E0G(~s+ z2*>yC;zHjIUf=f|g zqi@iA@n~~_=AAnj z^myrb_ZWv>+{5kR5&lL`IvgOBm`BcKFly8Q`~$*hZrAe0n5X~%002ovPDHLkV1iN| ByNdt- literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/stone_granite_smooth.png b/src/main/java/phantom/texture/stone_granite_smooth.png new file mode 100644 index 0000000000000000000000000000000000000000..d5b37f1b4cd3a70ecd804c81266e6fee9e324026 GIT binary patch literal 804 zcmV+<1Ka$GP)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*)2 z3@9)?zaPi|00N{*L_t(I%T<$6Z_`#7hMxx8J&9{4spHm7XbAyDs3MgnZiaHdU$TEU z?FVp$gp^%Os|JlI;EmQwo8r##lGxZjaVpA%TT7hF?~~4X-$&2cIDPf|ZF2se^4O11 zz6SgsCG7Q|6Mp=gYHN=NHyJlsO0bBr8wLP>9G{@9{BzuY&N%*j!SLu1t^xp}FktfW z0{~{Y1YmS>%F|YZdEJ1f!@rk4%73$v5ADmm3rO4?DmoVgz+>$CNZ;gMXp=qQj$xFX7ADXCIP72 zSMMDTXjRrI4V%bw$)#k_vB{;RcR0W#$FywBZl5==Ut?M}X_`^F$x@;)K>8CjA-Gu- z3|h~Q0MLZs`qO)45+jqC$aDGmM&V28sYk>{4lYPBkrm4A+K4iLIQ>)8>e zWfS{TG$9zDyhRg&-FCZt+3fZiPXmN*po%KWrt_HS&))#>&pjMdFDgjMizoXmmodUQ z;OulvtF{SYz@Sr9Lu?fy&C(UU{fDKDi}fuB&JIy{Cza|3O85_U;GQ6!m*Z^RjN_17BzP$~=T4rSxwPBM5 iSIkpMvnEhf6@c&bOgPZ5L(eb(0000Ja8)FFW`BZH=DSg z3+$VAXsM5{q}9X+^6z&-0(bZd^SpivoPuH%DiHZ|%(qxgR+S V^auO{bAA8-002ovPDHLkV1lXEaqj>C literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/stone_slab_top.png b/src/main/java/phantom/texture/stone_slab_top.png new file mode 100644 index 0000000000000000000000000000000000000000..090657d35ab2345c4c0c10b69fc3646bf5278d85 GIT binary patch literal 252 zcmVO}OlM>)nY}zfV&-}Tu(twP=S)8(zAln?Tht$HZ^P7)d!8_z~s!a)cFrlz|U|{@sU$8=O}F0000}#7ZZ{4ZhJl{XC*ALN_5eJi{bK&>eY@Rq1|;~Uj?o4Jfhe%w@3~Y|r9B`j zj0DpQ$tF6BQ$emPlxobJ_E`JAKenJv^wq-L1u}sElZQ`qW%_?XoI#)fWy2uQ8NPsQ wMNzQ!X_~V3;tzRaw5}T33(Mtl^uYA)4{lX$H)9>@=Kufz07*qoM6N<$g6uW6;Q#;t literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/stonebrick_carved.png b/src/main/java/phantom/texture/stonebrick_carved.png new file mode 100644 index 0000000000000000000000000000000000000000..b7e88db29ca34aa3de65da910138cfa02c9fa23c GIT binary patch literal 413 zcmV;O0b>4%P)Bl9oKc8-EKE~ zKA+aMt({IMzh19bYntW_kH^FI`@J2HM>`x2HX4o0@p!k}_1J7SHk-|Cxm@<(47S^C zkFqRnJRX}PBOeV0gMR^{EXypM^ww>i-GLc)W;fC44;bD;k~6Bte&*%Z@#RaLJ! zsO#Df3ZAGe(tv!2P#nd)olGX?kTDz%{ehyW_X07+L+Jho<3wYFjfDzE00000NkvXX Hu0mjf+f8=6 zoqoeGlvb-HaU6efxm+ZQBH3=Yve|4TlgWr9dAVGEF&qx1TCFOw*{tOAc^Qw#3S#y@ z8jUpW=t#i8!(y?hT@HtXOs7-zl}e@W<3gbzxm-?yAP`3f3tA%B@Ap520scy*BD2{{ z=JUCv(`j*NqZ?fT4}mYsKr>kJ-|cok3~*509>b*5>HO#h_+Vf*Omqg5$wX4Al zqtQ^?uvjd#8=A4#>$TeLcKcHR8i_xpHnnd#b zewXX@D)o9@bNzd9rk`2(+MCU$c6dAQu6Q&4L#);kQ^|U*zY_(S04o(Z0 zlj__7L2QPJ1X$r`!2VU*hTQ)ZTJ>_dtP+@!trx)bM}l9?f^?+-lefb$W+sd4yYBFO!2dnJ|00000 LNkvXXu0mjf>NMQk literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/stonebrick_mossy.png b/src/main/java/phantom/texture/stonebrick_mossy.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9fe37666c99d712f7f2ebb5b5f7aa57f2addce GIT binary patch literal 545 zcmV++0^a?JP)^x~W(31wNvNYhmRcH#r71_e@+$%OwvBfe-d3*)T9cX9^4#UH8S?a`T= zBQ>AT`IW}qsV+oQ>*=!w2Fg&>dCf9;?GI$#o{$1JDFCF&q+!x=8YLdk>-EUCZBoq3dXm%1(~&p?JMsXX~oL3G=sZ^ZzvP?%$Dn_m;i?+Bjs?dq?EDE^W74 z3X&^YtyY|Y^q0kXx&L`Zh=3A~7dP+Op2qNqmF{#p{4ySZfVcxp!2u-->)iYW9|KatVvT-B00000NkvXXu0mjfm(2f+ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/tallgrass.png b/src/main/java/phantom/texture/tallgrass.png new file mode 100644 index 0000000000000000000000000000000000000000..2869848f5f3cfd12be9b6ccf566829247448adab GIT binary patch literal 584 zcmV-O0=NB%P)Px#24YJ`L;yViVF0mJf#pR2000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^t= z3>X4)r)|Ul00GEJL_t(I%Z-yw%Xv{0#eet3lawLKYbi1Gu|zS^8JHtxjKtJ;@KuP^ z^_J*L$$+q*f$l+%fBnzobas2Mwf0{7z?akO^@RUC=C@!fmHL|8?RNhSJQ|JUn*uNX ztyn1~TEToiM=7O~I-QOHIF19rYPI@M;Q^cP%-E=tk zj^mI{r%_6Yi0C^U4%28fo_(4xvu3jy0L$g_3Gj~UDe#JFwVDwMg|Ka#TrQ{G84Lyz zkH=qoaJgIns8lM3C)=_tn$4!{_j`)PqA?zina}5l2-E45`~Cg`cxMJ^x7)^gy~eif zk9Z^!;qiC?XaE~vv)Pc%X8+jc^Z7pB_xl~gcy?T^R*jEUo=hh6`+WguwORsb1;gP` zJf++1mP8`)`4^JOB>8+^GkR0EEQ?qyrjtE(5uskMi*8}J+u^z{=ku9NCc|d40pNPQ zYP-BV(==Hu76gOACt0i2l1LnWl=xJk=U}n$_){^&7`MV!z1cRrm KpUXO@geCx9xFtdW literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/tnt_side.png b/src/main/java/phantom/texture/tnt_side.png new file mode 100644 index 0000000000000000000000000000000000000000..21109fbe9ce80fabb537d132eb99d0179f3fe905 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vproLLn>}1?|7^9_5YH&KmNZJ zTl9bWY>xlxQ_nL9S!5{xt8eW*@xOCd(|^yW{M^iW_y6%9etvH5@BTCH;>;T_{^T)W zWMgBqVDom!oFU`G(-z3nkT}CB<>-wgfnOdNGu%~}!?q@Vzg$n^q!T$gY=^Hj|2!d+ zljBsxbGyN_sBz(k|9QEM|3z2TfQ)aSQo(ZKW(wa&agT-&I|ixaK5ODOD5L_N$>8bg K=d#Wzp$PzzURVeK literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/tnt_top.png b/src/main/java/phantom/texture/tnt_top.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb44b6ddd8c3431e8d0e9ac65fe79a862017ab5 GIT binary patch literal 237 zcmV_W0AOpJ2?#INIr5F`3>=*p%==vy_R_0FAaO%&TSWmoLXzQ z$Mw{9@gOLrd;|zbL^t_P;5bx<9GNb_5JKcJ_@e^vNdaVW?A83#fM7Dx64fj647e){9XJ@6U(9=I0E nJ;uN2bPDNB8 zb~7$DE-^7j^FlWO00A~hL_t(IPnDBTO9D|8#ph!b2Bw=RTLl9KE`+eKWi5tq>7r2F zB#O8a+fsUNpk(Wz!K0#i0S{v0DYR^QL88Tpxs= zrw~3Kx+cQ5zB%5oeLnWA8hotgbORA8Uaqh|(+)QAJwa*K^-|tOELw z5Q9JfMA&#!Hk<&zv4t3NiU*n7inXvUK)aP10c>#nk)() z+q6atpo^5Q@qPL`0|KPB*GXwUev!zOTcdhSDj2tk?S ksl%sR@QWn;|Cg?XZ!1wN81*2oXaE2J07*qoM6N<$f{nYibN~PV literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/trip_wire.png b/src/main/java/phantom/texture/trip_wire.png new file mode 100644 index 0000000000000000000000000000000000000000..42126b808e4b82e1a4deeb3e47b54fb1ff6d4755 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{^MbQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%L2E{@KYKsA{UG zi(`m||J#7wye^77$^KqaDpeBAOdAB)l>)CqFF4@Q%ZY+b#LL|9^zGd|;IO V6m_SUVFk#q44$rjF6*2UngD-QWHJB% literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/trip_wire_source.png b/src/main/java/phantom/texture/trip_wire_source.png new file mode 100644 index 0000000000000000000000000000000000000000..fbd464d8d8ab049421cd58c8bb2d37bf6aa78af4 GIT binary patch literal 233 zcmV=p@Q(xCLAE32H*L9zPzVDMwHb4mR1z45^<2dF6>bk}- z4B(uDF@~mT(6((pfVR)`jA@#Zx-lkYvilkjcgE{}L-9Gq^@OLtlmlp(EQ$f7PZq_1 j!x_*Q4rM^we`W9nVD)lma0CXB00000NkvXXu0mjfGrM7e literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/vine.png b/src/main/java/phantom/texture/vine.png new file mode 100644 index 0000000000000000000000000000000000000000..df5e435ab23a41f3b7bec12a1172f682f400b8f6 GIT binary patch literal 235 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 WQVtXyOu?VYBT!Y+Qml}-3j04On!Z{9 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/water_still.png b/src/main/java/phantom/texture/water_still.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e90b07308c58daeab5432659e9ac45095204fc GIT binary patch literal 14567 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

|NJRJB2jmbz# z)D!9#6^QP8TL+Henk^nm*0XHa>IWC#1RJR*O#3 zaL*qoah*PrH2SKeWNC#5Y~!d$Z%RhW*1+b_V_RyI&cT`U&F84=!>K*Hq!A+lzI(vE z3)GMUjqh^cW~*A0^OJlXk2s1A3#jLC)q>ON=rX(^l9v#AbVPc-^L9GwoM|7>GO=q%fr<9n>2`NpOn+;O6s_Jk|4^*Y(2xKLB$&!Rh$s RLHPgx002ovPDHLkV1n%S)6xI{ literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/waterlily.png b/src/main/java/phantom/texture/waterlily.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c84f84494c43daad84671854097a17d9f49cdf GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`4W2HJAr-f_PG;mfpuodin|l9& z{-4(ScLO?7W@d-qXlb}s5w&({&D}F^Bu<^vb$(y#)qC&G(JN8WO@iI-Zv+phnQF~= zXzsAKv`cYue*{N@aD#;Q57Pwk^56?K!3?o;>>8&xRkQzz$+;qO$jNEzOU^@gx87rX jw2R~aA-*G8^;?8*JVA4Ti=vt~i&pUW~#*EpCNptSZdaJqmW!lGp z@8uom!ugD}FI3(LeWvhj<c3}xqI|yd{QsVsyms1GHr3<$0lsJd#3jl?}~1gUmJIv z`6hF?{^3mr=VeMU$$RI#x6d|vUEg+Bz;JbBlY|r_lZ%Q_>*RZjfVMGsy85}Sb4q9e E0O|QU+yDRo literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wheat_stage_2.png b/src/main/java/phantom/texture/wheat_stage_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3d3379292b4f8312bf8f26a6a3857ececf4d48a0 GIT binary patch literal 257 zcmV+c0sj7pP)0fhdEP)%YVV0U{09$c0_uF?LMxec044<@wK-&xVjV$^mA3 zZsz_k*2(uD-B96rY~iyT$>f>5|3%w*|9kD>{Lh`uiV$B1(THIv2)N7@{4Z1uG~^t_ z*=#`!|2?;I{}(6)x~7d6;-Z~gxWmNj5ZiyYK!*Qr%lQ9GP8I|!tUJK)pC^y)zw2WD z|14Gv|J~Oh*}MtnjU5n%=SH6YLN#3f?I#KTXN!hJU&VTc|7JD({~e|X{b!40_z$uK ztY-=jnC348y4G_G_kY0(&i`o>dH!=}vHs7U$^D-p8OIiQ3xFK9% z+XXbx8=6L}n+5-K=dgke5CLjTo51^D))yiP5)-mx_#fBA|6eJR`G0gRBwfTdK)eKE Z0|233hMytQZn6LX002ovPDHLkV1jf1u_OQh literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wheat_stage_4.png b/src/main/java/phantom/texture/wheat_stage_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ac04b52c751b078c4fe9890947874ac1d546bca7 GIT binary patch literal 454 zcmV;%0XhDOP)!i91{ zaY2ztiCe$GKY3Ye?QsYt?yQ?{^{#h4-}|ja^naIfPxu?*ARC1n?Dr7mf#8iPKLaRt z-^4x4`lLG_zw%xa0_$G9kIzde?E~v~e7tZ=2&QtrfShN)i5FQSe)L9#tKnV8eW%zL zta?5JBG)Rc869*aL3s%m!Y2lJ&1m6M_xEoSIdj39)zNgwU=GSoBijbdxD(M!U1;2s z@vBdnWJzg`UTMf3RZ+FC0DCXA;H;R)^fgw8=~jh%qgdGv|2j6urB%&br&oeAAksOFuRv$j8+OAzx%Aq`;zSbJJ00g9p`?Zjzud(;k=x==brC;_uLtxqk7!War~FT@a8eJ&FKGb z;{6Pxwbb-?2Dy)BL*eCG;tziGTLV+?hlUfAk)YwcJTBjJ>jLqM^xFY%Tf^yl4ff;K zWBAq3x=zTx6-Z2k13tH59v*4vy@mFQE&MR9kbo~24{^3tbL+%%qhw;>64Bk#C$hf*iIC+UM^iIHX2>T1< znz41-uQ^xyY!uZOafwgrgpQge1&=ogeRl=e$aV?)mvJPngHc)v8XkSnaQ-UcR!N|@ zYz7f}ZpX3k)Raa`&($vOzm6UJBP`-k7M>YMPv~-zNQ-hW`iD3IV=_ZvE%UXF5IVDa zU#GO9M5TuolKq52)s~ZRFJBSRI|*LdmRMOc0=~NtRR-Q20W(dwmKP9RguyWj`UPd+ z6nuko1c@oa)UsOM*t{)yX^@@tn`eDd(QoR6Dn+a07*qoM6N<$f;@irGynhq literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wheat_stage_6.png b/src/main/java/phantom/texture/wheat_stage_6.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5f1951efb8f9e1753cea3da02ef2fa34336dcd GIT binary patch literal 562 zcmV-20?qx2P)^QvsQi(%A>C9L*~{T zcrfPtH$cx9{nCs5yPh2Xz~LpTfp^uib4t!-z{heyG&nvTe*5B>nDW!&k7Lx zYQvo+S(RU+s!tJ0*teL@$KP#d8L4AJ%Z!Hk&ko${mJ(S3zeIe?DwHI5^Mt=6?iKs3 zunn}lPhcbRUPEKVjl?$v{>QRX^pjgCU_hk-T}(@GaxV{_`pnR|uexD77B(CxtRc*% zT&U_*OhDN~!t0N!0K_)s^m$%&Lv{&ZS(QB&%&ofMf0B>MxQdE4NuT(jnt zv*39Nz`LXywLu#uVk&O8O9j4+yrC&ws2X{r3qWvEH~rOt%wOQ%OIrv7uQU|a5<+iv zQvoO1%Lz>#9@r}k(DVg>{qh@+$SS>~8k7>k^Kl)HyE54JR27LFGmhvU*0R9z2fj2C zy;7cX(@+vI_97V!ghfR(cX~wZPYYdxngFx?8>-g$!=;cn#277%MWf6Vy+s9 ziA9nT6+|EU68&jU_q=Dj3ue&y@}Bd&&-=X3d(I*H$C{0|gZ_6dB%8^r*&q&eP!pcB z_7N`5w4uAZnY{8exG&b*+svhxdEEgERx9r}KB%}f&>&ZelJhs_tnKfFk?V>qEa>R# zBW&z?5V@lCJ^YNNz%%WjpA9$d9rusk2)^XLr)Ne>gsn=R>!Igy9aZvrN;CN5X&F*i)fL*Zl)rDxwYQ4$ZZ zgSX$LXs)a~&ITW-Qefq^AEP-PA`T@FV*3Z-#F$hsRsBrNuj-r=h5T=x8SG3x-+M25 zMhV$vgQKuHJgaf?`FeoGL}BvJ8kR}1cWH#^SO9K6Au%T%+#1(eSnU4*eNZNn1&%L^&v`=D{M~ukB0tv~3#uKK0j^_cRP?o#*@>x-Km- zW@%rq95at&7T#Ucq(A}z$G)fYlI==HkC&aopAtwh^!MYDb>74T682@e4S(yJb-G}q z7`jOC(@Z@hAaJb;A=uGD5X&1eUbI2D_527k0~hF^;R|&A?0}env3Wjo0XvfDa@9pf z62nmg))D*4%1<_F0xfv&xCGyTYko!~Rup6B%$_TO&pCrpnvl1es{YXATM07*qoM6N<$f)I_Sga7~l literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wool_colored_blue.png b/src/main/java/phantom/texture/wool_colored_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..ce9515f81913cec3b2308e7a1ad5a627573fd364 GIT binary patch literal 482 zcmV<80UiE{P)q zYf1w_5QOJ4#=KvvCTi4pCKZBWP((=xQ4s|ZMG)`V&R4q?{L$>pPIq-x^-O9Nx6vLw zM144q=I|yu<8=&<-h%(F-TUYtzC?fW8ui{RnmhC89Xu&mHwIUcx}!%W?VSF^-t;$y zlXn$##!CgDBm%~Mt9urW;#y5R<5eUIhQ}XO!77UBxAt`5A7JeH5}eaa``lOzK!dh{ z+M|V}uty62SQE|{+q_Sp(3wOI0V2>`>z#`_Z201n&+&kqgq~V|mJ{wa9aUJF>wT$t z8TG-X!0-m92|WZ}fDH9AR_e@uX%^F^s1ta=c>ccK1T&XoUOE0s_#~kw!z-uuh_y>6nT9@Z3!`0|SWW z(u=jGz|;~8b;;d`(vyWW10oOpU27&rkfV#lf+AC=JGTvejL&aF-7D%cI~U_gGF6Iv zyF4Oj18m*pO6i5Q%33R({lJjmTL~DTkm$Q%Py7h~ Y0CGC>yOvC>4gdfE07*qoM6N<$f>YY!K>z>% literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wool_colored_brown.png b/src/main/java/phantom/texture/wool_colored_brown.png new file mode 100644 index 0000000000000000000000000000000000000000..b4dc3c5237852b82bb277bee127475cb076626c8 GIT binary patch literal 410 zcmV;L0cHM)P)A|BZG|(I*T(6kU7WS~{B3?b4p@ltuT# zzg_N@&+AE9b~^MQSL2lD$HVk_pN*5?pHGG*2*By*ZomBAAC#|~Nd~-}kCK||NHXMy z!>x_{dNC?N!1wK58d0pfM95S@M>1qy2s_2#DVzw%rlXb7BQI-Zcu0THA_rNhjHCVA z^W)JVok7D3bnVOlpFsIE9b^J466kQ1odH4c*pcJ^@IV29ipuD*gOmVx2w&{c)^(Z4 z;n=fCoDsIZJ?zQV=;ZL)-V1!tA#d(L2MDn=l45QX>4ph~M%@h%cVT;mdTSJhNQgdjvhgosz&=3D2i6Mjt2o;|bItTi(y)i;KD zdiy%p*9WrZ{(WwrzGmHTjdJVgIk!(i=3L>2PMr9zw`X)C(oY0 z=|N-nR^~*&@W&Rqg&##5dv`hUpwoLV9>hiG@>4!lxC0EIFE%&$QZddH76Z_rT>0k2#8R{6UsLVZaF%1CD7(F1KK$fNw$jz~4DpAorBBpr%qv(OV>rpvL z%?pYiA7AK;T{&KQlAJ&?bm<4p;jVS~Bp~fcNgZhvlpm~g81ENitQf=pXuC zWmPM6Yg6N_m5+1L19m?QJziOBrLuPf3EoQmY{49P+C((^p*IX4R#Zcxcf&pLPxuSE WgC)&*;iOdn0000oYOu4 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wool_colored_gray.png b/src/main/java/phantom/texture/wool_colored_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..6409ff2f63c91d331455fbbc2ff5d632925cb801 GIT binary patch literal 360 zcmV-u0hj)XP)p zTMB?c2u0mfL_`!771jRtV;tece8}ji*XtvuY07z?a~#J+-?lB!^GyHueb3`Kau|k+ z!H=Nx7Z?OR&y(-_Rx%08vXlTsAYj;C*Htq1x~>@{T-Q}jJ^;c7m_NXCP~{FI1l~N4i9n4u#ype zm;!)~Fa!Jn3L=ohv1cneBYdqtoUW@e$V930Lf`EWk3<_l75XKRKY@6qPHPlIhjmCr zCa$M#1z-R@Ixn$i;0fECw7p1t?ODUnt<)izAayE2&GotoUKzTTx&x`Y1?f91KP)h|pjLoDu>ZY;9>1KY2=QShp02MQCzem6a``+i7muTq zo86?`zMmHDtG8)Nw>?S!YClckjx9(aVEa8U_djRl?qinv_3NZuy^M!Iz|a@#qjLVx z>%;^J>(5y_F>Jo(sZ#|TV5wIo_$j8I3_ydnKnQkpS^=0lV!Uiax&+!k0_|>d+|S{_ zh7;=ghZ$g890CEbVpnyN)SZFz002GO;eiYb1XfhWj$fwS)$s>th(HbpHY8K2ozY)^ zXz*!#MyNwk>YUJ*9l+#-?@18J^h=;E00f}a(_VF04|^aJ9RE?xo!Iv_Sh%&pC9BjG zl`=gOtlzcf#SoV)hW;vbsoEWT002ovPDHLkV1iZGwx0k1 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wool_colored_light_blue.png b/src/main/java/phantom/texture/wool_colored_light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..72d9d9e79e5a932553ad1f541c41d29db453664d GIT binary patch literal 509 zcmV1I55y&D%te#GUm)wuKWR}8+|iIX=M;@r@3 z3_RaXb3S!M15O62pAIS>pdoQBWa9 zb7$Yzq>hd6nZc#wxE{!9^qd&@9+w{dJVx}enp?gzc3rm?vY6gr+UR-l=`fq8GU^N~ z$nM24B?Wb+2jWd-R#T|vlx9c}t4CsN?A`BwJ*e)IBC(QCN3q7|i#~Rk*c&}*0xl$@ z+j-+#HpkuVx$P{ZU{N<}fX-Mqi0Bj(dTZ`QRbeb>c87&2m|Amy0*&bhHZ&`u2mi0N zi7`33NDdwqb?CN{KI5x@1A0+s9_vXfs#dhNt44&j!lhfxc=^uR185WT`>Cf^wzNX7 zAB=?BO2sfIuldtxtcSH>e5@dnSi4a@sh{vKRHeOtda5EC00000NkvXXu0mjfG~4j3 literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wool_colored_lime.png b/src/main/java/phantom/texture/wool_colored_lime.png new file mode 100644 index 0000000000000000000000000000000000000000..bf56389f0977326ed36ee341346069810de437f7 GIT binary patch literal 491 zcmVq-Mb429=~ti5cz+iiENb#3b}3qF@3D2k#eqEHk?K@jnV^}*tNX-|KInapHP&Pg(% zcb!;q*S7qkX~k8`ww^Mp-h0M*|2DDVYi`wB&(h<%<(Dn1Ub=4Vv(tu!&F9R6rt`}7 z{>C=?DEz_TzT*Zcfq>yB`)ih+H9YC?A+^ARov*?#Hy%@){0`hF3ul12A6JZflCdYT zGXM?R0xD-6mx7NJ&e&s$hb?{p1u6t`2@rwMVI9Z_9Wg<# z`Yx&f`%Fa5oWX)F(6zuuSuhyE#@iJ^sDV1dJstC|%@z!Ubc#CJnKty%KK%{<154@{ zkEuxzRUT=&)FSVD1eR_uaBMF=d#?cxCqDz%qmh+XGV6o+@GPeiFlQd+1%4VD^-vQg hDP)v>%?0uLg#QCQC({ANs^q z>qJ$`7?iQ#VjxCXpaO7&YIlK14EVC;{n;(*tr0=Uu8C z0Al1vHCK1eD7jy+1Q@+RsZr1Pa_;X3AAyW?3{^1GBjP9p0O=S#AZ{RI04YE+YN!z= z7}X041H$Amq&M7>vtv zre59ur6#}tQZqhOFa@S&9D*fb!$MJ_CdQS3&;#Q5`I(7fe0%oR+#m`n1Z%49$S9#(2SQxjW83` lh5>{s*i^svBJ%$p;V(tdz_*>x?q>i1002ovPDHLkV1huO-&+6x literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wool_colored_orange.png b/src/main/java/phantom/texture/wool_colored_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..eefe6deacf481e6457e90cf69fa55d759cdbae1a GIT binary patch literal 461 zcmV;;0W$uHP)q zO-e*T421hK{wxF+q6jWT1Vt1#dI^zPh=>j%;xB^UO%Oq6#y5JCn6F+}GmFrjmrkWp z$t$Cal^74#V|2b8+$T4i(LLk9s-8{eln+IisBa%x~Kh?Fnu}feJZ677(ORPoMQT(g~b3gXd6iA zFiW3S_{QD9#KkuK0*a{eu=bD9^T+9YPo1PZq3$?$-V`o==!*DF-0HjMufakOR^x?! zFlmv1hFV4i}-anGs*yQ-05Y18L}UIVME(bP70pgjP*j*k=i zW~aSLEA0W3NV@ckIBMZ`OF#gcx<|_$)`g1DF%$J$=iaC$aMJ`W>LyA9QDKBx4YMZn ztkzP4*|mnDr=mr2f~kv9ZkxyJ-QYBJEm0<;NoiCw$=l@-L0cd*EA5r%E)7V;oZxlU zxU#Z;Fk0|d0;VO)_6mQRl&*>1Ft^esRCmLg_$T}ay&9G=e4obe00000NkvXXu0mjf DzB1RP literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wool_colored_pink.png b/src/main/java/phantom/texture/wool_colored_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..c2785af29ebd49add45466a43619de2a3a1d7c92 GIT binary patch literal 513 zcmV+c0{;DpP)?VkUC?bfUAX^kfLTN(-$&3n0q5=uJ=(;S)$`nP)7WymGdEOkMi{YEI zeD5+dCp;}|S~HQi$JvZE=Cjt$ltE0N)@fORuCu`0b_kTvS{_`v`E|Oq6L2FmoIh5#^+I0YgpI= zj5S~4>-b7!Fkg zaoFqT4h00DOUD|7(}+LX=WhdcSLj`#Cc&jLqCQ>TB4h*XzOhD5kgEo;5%}?ub+5F} zXM`^JR04)_>;+yL9%0rqjhh?-geutFzt08t{Sp2G@Yw9k_;mas00000NkvXXu0mjf D%|z{- literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wool_colored_purple.png b/src/main/java/phantom/texture/wool_colored_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..76f68d6d7ff3fbf16890d6318a1b283e15785152 GIT binary patch literal 501 zcmVq?eE5C`zRq&&WsuO&ng7!+NElvrV=mQi689WW{oq(BlQQ9>yp3KYx^-qyr#WW*1{ zGrP0%^+-*;x^z@;)m>KjtwW@fXb&?G@~N{nH+s_QfWze8=y{*b zv9~a?n?L|dI%^2!W~X5!re>Xf?d#e_3C zND`MyI(E~@pXaN81A8f~SJ9JJQjO?I`8CRb%eR_b$h};{Citn5Ew7mC2lEOwmB1)x ruldt>tcx{a)>L6*v1X%sQa|B;<2Z3-rU7Es00000NkvXXu0mjf4lC?D literal 0 HcmV?d00001 diff --git a/src/main/java/phantom/texture/wool_colored_red.png b/src/main/java/phantom/texture/wool_colored_red.png new file mode 100644 index 0000000000000000000000000000000000000000..0cff7a9bf160fed80f54d4ce1354c349cd8dec59 GIT binary patch literal 464 zcmV;>0WbcEP)KByQ_qI|MtZ-lDK5Mo%v;jI?+=T%$Kni_y|4Iluxw=3 zh?@dv&x`2>=w=e3GY_9e~xxqM?LT~LLYOnFLKu@-tDUm%MBr8(5Nj0t0UB)6R}>299Jp#su1 zGtz;OPaP%ZMo*f8yt&IC`@5|<&K_oOKma41HH6kwZ{{FMB(mR@ihyTlRIujNiUk&I zf+EsA6_DheyX?gTz&1$n8R^(eBY&PR{|5Fb%&WA2AySR#_P>x(1{~k)Sl_=-X6peq z!B0juUOinvy+WoE*v+mp+FD`1)-rZdk50=l*HP|1IW4+y0Uln)2_`YoO9pApc*R#Tv0kqk2 zxdZCl-c~7mQm}DmnUC#avxx!)6^VlM1EYDb(TK}_zp^2r*>2Z3BTY`BXTRBuKi%%G zqKDbs^qsM5oS#=P0N3Asq38AEBj)RMt&BRuN@YC~$CMP*nI4E2$P7>hBx6IPN-AcL z#MtWP<);VPT~g?EDFJoObcZ?+^s&Rl-snk@;DR1>_m7ThbKH#|9x4#Pq;Av-I@_J1 zB09;0-kf_<1&jsF?yw-u)QW>DsxkdQ-Kct?eV>Fet&w%ctypU*JP=X1U= zo6X|$^D~1=1ZH2URHD^tWzzY49?6Bv<&uMo#Uk$ad)}|t>wE^xe!t)6`FK3y_xCrS zBhCt-9S(;-pvh#Ct=O|djkQ_wjh~;NNKi=$$4keMUn9fKCLOykrcsFX2Bsk!Q+_$&4TpVYc%_ak3 zEJLdi8s1LANDd_?zoZr`Vt}bo6JS*6g03YCEZ9u-AYH34sew49F6&sWR?CX>Lz3)L zkxr4<$e;F=zk$6-H(XYef!gjmevY+x~i&w2HA50h6 y(0gE%vzPod9x)3#6a+*SMi!|o??Qh0g#Q3(shIxjElhU+0000iBR_*C+FJur*zWJJWS>G+S54bM@}cMD4Ck*4gJlH~!Z0 zqiUz020iKS$721vS*%}Y^Zmim{^M>yB?5CEz8tIV|Bn^@dhn#02fr^Ddhpwar*(Vv zyq{HZ2h7=*iU0k%)P03J188Um=*!+rm*Px{J3dQ3wm0Vs)u5mvQ4kQLdH7^ z^~Ci+PILM8^+X3qMGw>5ocWk+3?KTTH<&hh(mcqhGptm0FODeyKGOs72AKsY&B2C7 zl~hcR#75&S-6ch$O9`l>nDP0dkDar<@unp~GP*0T#(Q(z1;{tljaosz-DxV0&RHPm zPz4N-W_MVaf~hr5sxbY)hGrmoFuK+z#^m%x;&>G57}+-Zj4%I&>S36v=t&DzkFs4E z5!!&Gn;heH=9^se@Xz;WT~AgvT2;=DkdUnehBVD>_Oe!_ba Wxqaf0;a?a40000 getAlphabet() + { + GList al = new GList(); + + for(Alphabet a : values()) + { + al.add(a.getChar()); + } + + return al; + } +} diff --git a/src/main/java/phantom/util/files/IO.java b/src/main/java/phantom/util/files/IO.java new file mode 100644 index 000000000..8aa68e6a3 --- /dev/null +++ b/src/main/java/phantom/util/files/IO.java @@ -0,0 +1,1466 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package phantom.util.files; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.CharArrayWriter; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.Reader; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +/** + * General IO stream manipulation utilities. + *

+ * This class provides static utility methods for input/output operations. + *

    + *
  • closeQuietly - these methods close a stream ignoring nulls and exceptions + *
  • toXxx/read - these methods read data from a stream + *
  • write - these methods write data to a stream + *
  • copy - these methods copy all the data from one stream to another + *
  • contentEquals - these methods compare the content of two streams + *
+ *

+ * The byte-to-char methods and char-to-byte methods involve a conversion step. + * Two methods are provided in each case, one that uses the platform default + * encoding and the other which allows you to specify an encoding. You are + * encouraged to always specify an encoding because relying on the platform + * default can lead to unexpected results, for example when moving from + * development to production. + *

+ * All the methods in this class that read a stream are buffered internally. + * This means that there is no cause to use a BufferedInputStream + * or BufferedReader. The default buffer size of 4K has been shown + * to be efficient in tests. + *

+ * Wherever possible, the methods in this class do not flush or close + * the stream. This is to avoid making non-portable assumptions about the + * streams' origin and further use. Thus the caller is still responsible for + * closing streams after use. + *

+ * Origin of code: Excalibur. + * + * @author Peter Donald + * @author Jeff Turner + * @author Matthew Hawthorne + * @author Stephen Colebourne + * @author Gareth Davis + * @author Ian Springer + * @author Niall Pemberton + * @author Sandy McArthur + * @version $Id: IOUtils.java 481854 2006-12-03 18:30:07Z scolebourne $ + */ +public class IO +{ + // NOTE: This class is focussed on InputStream, OutputStream, Reader and + // Writer. Each method should take at least one of these as a parameter, + // or return one of them. + + /** + * The Unix directory separator character. + */ + public static final char DIR_SEPARATOR_UNIX = '/'; + /** + * The Windows directory separator character. + */ + public static final char DIR_SEPARATOR_WINDOWS = '\\'; + /** + * The system directory separator character. + */ + public static final char DIR_SEPARATOR = File.separatorChar; + /** + * The Unix line separator string. + */ + public static final String LINE_SEPARATOR_UNIX = "\n"; + /** + * The Windows line separator string. + */ + public static final String LINE_SEPARATOR_WINDOWS = "\r\n"; + /** + * The system line separator string. + */ + public static final String LINE_SEPARATOR; + static + { + // avoid security issues + StringWriter buf = new StringWriter(4); + PrintWriter out = new PrintWriter(buf); + out.println(); + LINE_SEPARATOR = buf.toString(); + } + + /** + * The default buffer size to use. + */ + private static final int DEFAULT_BUFFER_SIZE = 1024 * 4; + + /** + * Instances should NOT be constructed in standard programming. + */ + public IO() + { + super(); + } + + // ----------------------------------------------------------------------- + /** + * Unconditionally close an Reader. + *

+ * Equivalent to {@link Reader#close()}, except any exceptions will be + * ignored. This is typically used in finally blocks. + * + * @param input + * the Reader to close, may be null or already closed + */ + public static void closeQuietly(Reader input) + { + try + { + if(input != null) + { + input.close(); + } + } catch(IOException ioe) + { + // ignore + } + } + + /** + * Unconditionally close a Writer. + *

+ * Equivalent to {@link Writer#close()}, except any exceptions will be + * ignored. This is typically used in finally blocks. + * + * @param output + * the Writer to close, may be null or already closed + */ + public static void closeQuietly(Writer output) + { + try + { + if(output != null) + { + output.close(); + } + } catch(IOException ioe) + { + // ignore + } + } + + /** + * Unconditionally close an InputStream. + *

+ * Equivalent to {@link InputStream#close()}, except any exceptions will be + * ignored. This is typically used in finally blocks. + * + * @param input + * the InputStream to close, may be null or already closed + */ + public static void closeQuietly(InputStream input) + { + try + { + if(input != null) + { + input.close(); + } + } catch(IOException ioe) + { + // ignore + } + } + + /** + * Unconditionally close an OutputStream. + *

+ * Equivalent to {@link OutputStream#close()}, except any exceptions will be + * ignored. This is typically used in finally blocks. + * + * @param output + * the OutputStream to close, may be null or already closed + */ + public static void closeQuietly(OutputStream output) + { + try + { + if(output != null) + { + output.close(); + } + } catch(IOException ioe) + { + // ignore + } + } + + // read toByteArray + // ----------------------------------------------------------------------- + /** + * Get the contents of an InputStream as a byte[]. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + * + * @param input + * the InputStream to read from + * @return the requested byte array + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + */ + public static byte[] toByteArray(InputStream input) throws IOException + { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + copy(input, output); + return output.toByteArray(); + } + + /** + * Get the contents of a Reader as a byte[] using + * the default character encoding of the platform. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedReader. + * + * @param input + * the Reader to read from + * @return the requested byte array + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + */ + public static byte[] toByteArray(Reader input) throws IOException + { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + copy(input, output); + return output.toByteArray(); + } + + /** + * Get the contents of a Reader as a byte[] using + * the specified character encoding. + *

+ * Character encoding names can be found at + * IANA. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedReader. + * + * @param input + * the Reader to read from + * @param encoding + * the encoding to use, null means platform default + * @return the requested byte array + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static byte[] toByteArray(Reader input, String encoding) throws IOException + { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + copy(input, output, encoding); + return output.toByteArray(); + } + + /** + * Get the contents of a String as a byte[] using + * the default character encoding of the platform. + *

+ * This is the same as {@link String#getBytes()}. + * + * @param input + * the String to convert + * @return the requested byte array + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs (never occurs) + * @deprecated Use {@link String#getBytes()} + */ + @Deprecated + public static byte[] toByteArray(String input) throws IOException + { + return input.getBytes(); + } + + // read char[] + // ----------------------------------------------------------------------- + /** + * Get the contents of an InputStream as a character array + * using the default character encoding of the platform. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + * + * @param is + * the InputStream to read from + * @return the requested character array + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static char[] toCharArray(InputStream is) throws IOException + { + CharArrayWriter output = new CharArrayWriter(); + copy(is, output); + return output.toCharArray(); + } + + /** + * Get the contents of an InputStream as a character array + * using the specified character encoding. + *

+ * Character encoding names can be found at + * IANA. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + * + * @param is + * the InputStream to read from + * @param encoding + * the encoding to use, null means platform default + * @return the requested character array + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static char[] toCharArray(InputStream is, String encoding) throws IOException + { + CharArrayWriter output = new CharArrayWriter(); + copy(is, output, encoding); + return output.toCharArray(); + } + + /** + * Get the contents of a Reader as a character array. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedReader. + * + * @param input + * the Reader to read from + * @return the requested character array + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static char[] toCharArray(Reader input) throws IOException + { + CharArrayWriter sw = new CharArrayWriter(); + copy(input, sw); + return sw.toCharArray(); + } + + // read toString + // ----------------------------------------------------------------------- + /** + * Get the contents of an InputStream as a String using the + * default character encoding of the platform. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + * + * @param input + * the InputStream to read from + * @return the requested String + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + */ + public static String toString(InputStream input) throws IOException + { + StringWriter sw = new StringWriter(); + copy(input, sw); + return sw.toString(); + } + + /** + * Get the contents of an InputStream as a String using the + * specified character encoding. + *

+ * Character encoding names can be found at + * IANA. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + * + * @param input + * the InputStream to read from + * @param encoding + * the encoding to use, null means platform default + * @return the requested String + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + */ + public static String toString(InputStream input, String encoding) throws IOException + { + StringWriter sw = new StringWriter(); + copy(input, sw, encoding); + return sw.toString(); + } + + /** + * Get the contents of a Reader as a String. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedReader. + * + * @param input + * the Reader to read from + * @return the requested String + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + */ + public static String toString(Reader input) throws IOException + { + StringWriter sw = new StringWriter(); + copy(input, sw); + return sw.toString(); + } + + /** + * Get the contents of a byte[] as a String using the default + * character encoding of the platform. + * + * @param input + * the byte array to read from + * @return the requested String + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs (never occurs) + * @deprecated Use {@link String#String(byte[])} + */ + @Deprecated + public static String toString(byte[] input) throws IOException + { + return new String(input); + } + + /** + * Get the contents of a byte[] as a String using the specified + * character encoding. + *

+ * Character encoding names can be found at + * IANA. + * + * @param input + * the byte array to read from + * @param encoding + * the encoding to use, null means platform default + * @return the requested String + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs (never occurs) + * @deprecated Use {@link String#String(byte[],String)} + */ + @Deprecated + public static String toString(byte[] input, String encoding) throws IOException + { + if(encoding == null) + { + return new String(input); + } else + { + return new String(input, encoding); + } + } + + // readLines + // ----------------------------------------------------------------------- + /** + * Get the contents of an InputStream as a list of Strings, one + * entry per line, using the default character encoding of the platform. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + * + * @param input + * the InputStream to read from, not null + * @return the list of Strings, never null + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static List readLines(InputStream input) throws IOException + { + InputStreamReader reader = new InputStreamReader(input); + return readLines(reader); + } + + /** + * Get the contents of an InputStream as a list of Strings, one + * entry per line, using the specified character encoding. + *

+ * Character encoding names can be found at + * IANA. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + * + * @param input + * the InputStream to read from, not null + * @param encoding + * the encoding to use, null means platform default + * @return the list of Strings, never null + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static List readLines(InputStream input, String encoding) throws IOException + { + if(encoding == null) + { + return readLines(input); + } else + { + InputStreamReader reader = new InputStreamReader(input, encoding); + return readLines(reader); + } + } + + /** + * Get the contents of a Reader as a list of Strings, one entry + * per line. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedReader. + * + * @param input + * the Reader to read from, not null + * @return the list of Strings, never null + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static List readLines(Reader input) throws IOException + { + BufferedReader reader = new BufferedReader(input); + List list = new ArrayList(); + String line = reader.readLine(); + while(line != null) + { + list.add(line); + line = reader.readLine(); + } + return list; + } + + // ----------------------------------------------------------------------- + /** + * Convert the specified string to an input stream, encoded as bytes using + * the default character encoding of the platform. + * + * @param input + * the string to convert + * @return an input stream + * @since Commons IO 1.1 + */ + public static InputStream toInputStream(String input) + { + byte[] bytes = input.getBytes(); + return new ByteArrayInputStream(bytes); + } + + /** + * Convert the specified string to an input stream, encoded as bytes using + * the specified character encoding. + *

+ * Character encoding names can be found at + * IANA. + * + * @param input + * the string to convert + * @param encoding + * the encoding to use, null means platform default + * @throws IOException + * if the encoding is invalid + * @return an input stream + * @since Commons IO 1.1 + */ + public static InputStream toInputStream(String input, String encoding) throws IOException + { + byte[] bytes = encoding != null ? input.getBytes(encoding) : input.getBytes(); + return new ByteArrayInputStream(bytes); + } + + // write byte[] + // ----------------------------------------------------------------------- + /** + * Writes bytes from a byte[] to an OutputStream. + * + * @param data + * the byte array to write, do not modify during output, null + * ignored + * @param output + * the OutputStream to write to + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(byte[] data, OutputStream output) throws IOException + { + if(data != null) + { + output.write(data); + } + } + + /** + * Writes bytes from a byte[] to chars on a Writer + * using the default character encoding of the platform. + *

+ * This method uses {@link String#String(byte[])}. + * + * @param data + * the byte array to write, do not modify during output, null + * ignored + * @param output + * the Writer to write to + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(byte[] data, Writer output) throws IOException + { + if(data != null) + { + output.write(new String(data)); + } + } + + /** + * Writes bytes from a byte[] to chars on a Writer + * using the specified character encoding. + *

+ * Character encoding names can be found at + * IANA. + *

+ * This method uses {@link String#String(byte[], String)}. + * + * @param data + * the byte array to write, do not modify during output, null + * ignored + * @param output + * the Writer to write to + * @param encoding + * the encoding to use, null means platform default + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(byte[] data, Writer output, String encoding) throws IOException + { + if(data != null) + { + if(encoding == null) + { + write(data, output); + } else + { + output.write(new String(data, encoding)); + } + } + } + + // write char[] + // ----------------------------------------------------------------------- + /** + * Writes chars from a char[] to a Writer using + * the default character encoding of the platform. + * + * @param data + * the char array to write, do not modify during output, null + * ignored + * @param output + * the Writer to write to + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(char[] data, Writer output) throws IOException + { + if(data != null) + { + output.write(data); + } + } + + /** + * Writes chars from a char[] to bytes on an + * OutputStream. + *

+ * This method uses {@link String#String(char[])} and + * {@link String#getBytes()}. + * + * @param data + * the char array to write, do not modify during output, null + * ignored + * @param output + * the OutputStream to write to + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(char[] data, OutputStream output) throws IOException + { + if(data != null) + { + output.write(new String(data).getBytes()); + } + } + + /** + * Writes chars from a char[] to bytes on an + * OutputStream using the specified character encoding. + *

+ * Character encoding names can be found at + * IANA. + *

+ * This method uses {@link String#String(char[])} and + * {@link String#getBytes(String)}. + * + * @param data + * the char array to write, do not modify during output, null + * ignored + * @param output + * the OutputStream to write to + * @param encoding + * the encoding to use, null means platform default + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(char[] data, OutputStream output, String encoding) throws IOException + { + if(data != null) + { + if(encoding == null) + { + write(data, output); + } else + { + output.write(new String(data).getBytes(encoding)); + } + } + } + + // write String + // ----------------------------------------------------------------------- + /** + * Writes chars from a String to a Writer. + * + * @param data + * the String to write, null ignored + * @param output + * the Writer to write to + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(String data, Writer output) throws IOException + { + if(data != null) + { + output.write(data); + } + } + + /** + * Writes chars from a String to bytes on an + * OutputStream using the default character encoding of the + * platform. + *

+ * This method uses {@link String#getBytes()}. + * + * @param data + * the String to write, null ignored + * @param output + * the OutputStream to write to + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(String data, OutputStream output) throws IOException + { + if(data != null) + { + output.write(data.getBytes()); + } + } + + /** + * Writes chars from a String to bytes on an + * OutputStream using the specified character encoding. + *

+ * Character encoding names can be found at + * IANA. + *

+ * This method uses {@link String#getBytes(String)}. + * + * @param data + * the String to write, null ignored + * @param output + * the OutputStream to write to + * @param encoding + * the encoding to use, null means platform default + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(String data, OutputStream output, String encoding) throws IOException + { + if(data != null) + { + if(encoding == null) + { + write(data, output); + } else + { + output.write(data.getBytes(encoding)); + } + } + } + + // write StringBuffer + // ----------------------------------------------------------------------- + /** + * Writes chars from a StringBuffer to a Writer. + * + * @param data + * the StringBuffer to write, null ignored + * @param output + * the Writer to write to + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(StringBuffer data, Writer output) throws IOException + { + if(data != null) + { + output.write(data.toString()); + } + } + + /** + * Writes chars from a StringBuffer to bytes on an + * OutputStream using the default character encoding of the + * platform. + *

+ * This method uses {@link String#getBytes()}. + * + * @param data + * the StringBuffer to write, null ignored + * @param output + * the OutputStream to write to + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(StringBuffer data, OutputStream output) throws IOException + { + if(data != null) + { + output.write(data.toString().getBytes()); + } + } + + /** + * Writes chars from a StringBuffer to bytes on an + * OutputStream using the specified character encoding. + *

+ * Character encoding names can be found at + * IANA. + *

+ * This method uses {@link String#getBytes(String)}. + * + * @param data + * the StringBuffer to write, null ignored + * @param output + * the OutputStream to write to + * @param encoding + * the encoding to use, null means platform default + * @throws NullPointerException + * if output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void write(StringBuffer data, OutputStream output, String encoding) throws IOException + { + if(data != null) + { + if(encoding == null) + { + write(data, output); + } else + { + output.write(data.toString().getBytes(encoding)); + } + } + } + + // writeLines + // ----------------------------------------------------------------------- + /** + * Writes the toString() value of each item in a collection to + * an OutputStream line by line, using the default character + * encoding of the platform and the specified line ending. + * + * @param lines + * the lines to write, null entries produce blank lines + * @param lineEnding + * the line separator to use, null is system default + * @param output + * the OutputStream to write to, not null, not + * closed + * @throws NullPointerException + * if the output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void writeLines(Collection lines, String lineEnding, OutputStream output) throws IOException + { + if(lines == null) + { + return; + } + if(lineEnding == null) + { + lineEnding = LINE_SEPARATOR; + } + for(Iterator it = lines.iterator(); it.hasNext();) + { + Object line = it.next(); + if(line != null) + { + output.write(line.toString().getBytes()); + } + output.write(lineEnding.getBytes()); + } + } + + /** + * Writes the toString() value of each item in a collection to + * an OutputStream line by line, using the specified character + * encoding and the specified line ending. + *

+ * Character encoding names can be found at + * IANA. + * + * @param lines + * the lines to write, null entries produce blank lines + * @param lineEnding + * the line separator to use, null is system default + * @param output + * the OutputStream to write to, not null, not + * closed + * @param encoding + * the encoding to use, null means platform default + * @throws NullPointerException + * if the output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void writeLines(Collection lines, String lineEnding, OutputStream output, String encoding) throws IOException + { + if(encoding == null) + { + writeLines(lines, lineEnding, output); + } else + { + if(lines == null) + { + return; + } + if(lineEnding == null) + { + lineEnding = LINE_SEPARATOR; + } + for(Iterator it = lines.iterator(); it.hasNext();) + { + Object line = it.next(); + if(line != null) + { + output.write(line.toString().getBytes(encoding)); + } + output.write(lineEnding.getBytes(encoding)); + } + } + } + + /** + * Writes the toString() value of each item in a collection to + * a Writer line by line, using the specified line ending. + * + * @param lines + * the lines to write, null entries produce blank lines + * @param lineEnding + * the line separator to use, null is system default + * @param writer + * the Writer to write to, not null, not closed + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void writeLines(Collection lines, String lineEnding, Writer writer) throws IOException + { + if(lines == null) + { + return; + } + if(lineEnding == null) + { + lineEnding = LINE_SEPARATOR; + } + for(Iterator it = lines.iterator(); it.hasNext();) + { + Object line = it.next(); + if(line != null) + { + writer.write(line.toString()); + } + writer.write(lineEnding); + } + } + + // copy from InputStream + // ----------------------------------------------------------------------- + /** + * Copy bytes from an InputStream to an + * OutputStream. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + *

+ * Large streams (over 2GB) will return a bytes copied value of + * -1 after the copy has completed since the correct number of + * bytes cannot be returned as an int. For large streams use the + * copyLarge(InputStream, OutputStream) method. + * + * @param input + * the InputStream to read from + * @param output + * the OutputStream to write to + * @return the number of bytes copied + * @throws NullPointerException + * if the input or output is null + * @throws IOException + * if an I/O error occurs + * @throws ArithmeticException + * if the byte count is too large + * @since Commons IO 1.1 + */ + public static int copy(InputStream input, OutputStream output) throws IOException + { + long count = copyLarge(input, output); + if(count > Integer.MAX_VALUE) + { + return -1; + } + return (int) count; + } + + /** + * Copy bytes from a large (over 2GB) InputStream to an + * OutputStream. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + * + * @param input + * the InputStream to read from + * @param output + * the OutputStream to write to + * @return the number of bytes copied + * @throws NullPointerException + * if the input or output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.3 + */ + public static long copyLarge(InputStream input, OutputStream output) throws IOException + { + byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; + long count = 0; + int n = 0; + while(-1 != (n = input.read(buffer))) + { + output.write(buffer, 0, n); + count += n; + } + return count; + } + + /** + * Copy bytes from an InputStream to chars on a + * Writer using the default character encoding of the platform. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + *

+ * This method uses {@link InputStreamReader}. + * + * @param input + * the InputStream to read from + * @param output + * the Writer to write to + * @throws NullPointerException + * if the input or output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void copy(InputStream input, Writer output) throws IOException + { + InputStreamReader in = new InputStreamReader(input); + copy(in, output); + } + + /** + * Copy bytes from an InputStream to chars on a + * Writer using the specified character encoding. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedInputStream. + *

+ * Character encoding names can be found at + * IANA. + *

+ * This method uses {@link InputStreamReader}. + * + * @param input + * the InputStream to read from + * @param output + * the Writer to write to + * @param encoding + * the encoding to use, null means platform default + * @throws NullPointerException + * if the input or output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void copy(InputStream input, Writer output, String encoding) throws IOException + { + if(encoding == null) + { + copy(input, output); + } else + { + InputStreamReader in = new InputStreamReader(input, encoding); + copy(in, output); + } + } + + // copy from Reader + // ----------------------------------------------------------------------- + /** + * Copy chars from a Reader to a Writer. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedReader. + *

+ * Large streams (over 2GB) will return a chars copied value of + * -1 after the copy has completed since the correct number of + * chars cannot be returned as an int. For large streams use the + * copyLarge(Reader, Writer) method. + * + * @param input + * the Reader to read from + * @param output + * the Writer to write to + * @return the number of characters copied + * @throws NullPointerException + * if the input or output is null + * @throws IOException + * if an I/O error occurs + * @throws ArithmeticException + * if the character count is too large + * @since Commons IO 1.1 + */ + public static int copy(Reader input, Writer output) throws IOException + { + long count = copyLarge(input, output); + if(count > Integer.MAX_VALUE) + { + return -1; + } + return (int) count; + } + + /** + * Copy chars from a large (over 2GB) Reader to a + * Writer. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedReader. + * + * @param input + * the Reader to read from + * @param output + * the Writer to write to + * @return the number of characters copied + * @throws NullPointerException + * if the input or output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.3 + */ + public static long copyLarge(Reader input, Writer output) throws IOException + { + char[] buffer = new char[DEFAULT_BUFFER_SIZE]; + long count = 0; + int n = 0; + while(-1 != (n = input.read(buffer))) + { + output.write(buffer, 0, n); + count += n; + } + return count; + } + + /** + * Copy chars from a Reader to bytes on an + * OutputStream using the default character encoding of the + * platform, and calling flush. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedReader. + *

+ * Due to the implementation of OutputStreamWriter, this method performs a + * flush. + *

+ * This method uses {@link OutputStreamWriter}. + * + * @param input + * the Reader to read from + * @param output + * the OutputStream to write to + * @throws NullPointerException + * if the input or output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void copy(Reader input, OutputStream output) throws IOException + { + OutputStreamWriter out = new OutputStreamWriter(output); + copy(input, out); + // have to flush here. + out.flush(); + } + + /** + * Copy chars from a Reader to bytes on an + * OutputStream using the specified character encoding, and + * calling flush. + *

+ * This method buffers the input internally, so there is no need to use a + * BufferedReader. + *

+ * Character encoding names can be found at + * IANA. + *

+ * Due to the implementation of OutputStreamWriter, this method performs a + * flush. + *

+ * This method uses {@link OutputStreamWriter}. + * + * @param input + * the Reader to read from + * @param output + * the OutputStream to write to + * @param encoding + * the encoding to use, null means platform default + * @throws NullPointerException + * if the input or output is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static void copy(Reader input, OutputStream output, String encoding) throws IOException + { + if(encoding == null) + { + copy(input, output); + } else + { + OutputStreamWriter out = new OutputStreamWriter(output, encoding); + copy(input, out); + // we have to flush here. + out.flush(); + } + } + + // content equals + // ----------------------------------------------------------------------- + /** + * Compare the contents of two Streams to determine if they are equal or + * not. + *

+ * This method buffers the input internally using + * BufferedInputStream if they are not already buffered. + * + * @param input1 + * the first stream + * @param input2 + * the second stream + * @return true if the content of the streams are equal or they both don't + * exist, false otherwise + * @throws NullPointerException + * if either input is null + * @throws IOException + * if an I/O error occurs + */ + public static boolean contentEquals(InputStream input1, InputStream input2) throws IOException + { + if(!(input1 instanceof BufferedInputStream)) + { + input1 = new BufferedInputStream(input1); + } + if(!(input2 instanceof BufferedInputStream)) + { + input2 = new BufferedInputStream(input2); + } + + int ch = input1.read(); + while(-1 != ch) + { + int ch2 = input2.read(); + if(ch != ch2) + { + return false; + } + ch = input1.read(); + } + + int ch2 = input2.read(); + return (ch2 == -1); + } + + /** + * Compare the contents of two Readers to determine if they are equal or + * not. + *

+ * This method buffers the input internally using + * BufferedReader if they are not already buffered. + * + * @param input1 + * the first reader + * @param input2 + * the second reader + * @return true if the content of the readers are equal or they both don't + * exist, false otherwise + * @throws NullPointerException + * if either input is null + * @throws IOException + * if an I/O error occurs + * @since Commons IO 1.1 + */ + public static boolean contentEquals(Reader input1, Reader input2) throws IOException + { + if(!(input1 instanceof BufferedReader)) + { + input1 = new BufferedReader(input1); + } + if(!(input2 instanceof BufferedReader)) + { + input2 = new BufferedReader(input2); + } + + int ch = input1.read(); + while(-1 != ch) + { + int ch2 = input2.read(); + if(ch != ch2) + { + return false; + } + ch = input1.read(); + } + + int ch2 = input2.read(); + return (ch2 == -1); + } + +} diff --git a/src/main/java/phantom/world/Chunks.java b/src/main/java/phantom/world/Chunks.java new file mode 100644 index 000000000..de4b177cd --- /dev/null +++ b/src/main/java/phantom/world/Chunks.java @@ -0,0 +1,207 @@ +package phantom.world; + +import org.bukkit.Chunk; +import org.bukkit.World; + +import phantom.lang.GList; + +/** + * Chunk utils + * + * @author cyberpwn + */ +public class Chunks +{ + /** + * Get all loaded chunks in the world + * + * @param world + * the given world + * @return the chunks + */ + public static GList getLoadedChunks(World world) + { + return new GList(world.getLoadedChunks()); + } + + /** + * Get all loaded chunks in all worlds + * + * @return all loaded chunks + */ + public static GList getLoadedChunks() + { + GList chunks = new GList(); + + for(World i : Worlds.getWorlds()) + { + chunks.add(getLoadedChunks(i)); + } + + return chunks; + } + + /** + * Get chunks in a radius + * + * @param center + * the center chunk + * @param radius + * the radius + * @return the chunks + */ + public static GList getRadius(Chunk center, int radius) + { + return W.chunkRadius(center, radius); + } + + /** + * Unload the given chunk + * + * @param chunk + * the chunk + * @param save + * should this chunk be saved + * @param safe + * if set to true, the chunk will not be unloaded if players are + * nearby + * @return true if the chunk unloaded + */ + @SuppressWarnings("deprecation") + public static boolean unload(Chunk chunk, boolean save, boolean safe) + { + return chunk.unload(save, safe); + } + + /** + * Unload the given chunk + * + * @param chunk + * the chunk + * @param save + * should this chunk be saved? + * @return returns true if the chunk unloaded + */ + public static boolean unload(Chunk chunk, boolean save) + { + return unload(chunk, save, true); + } + + /** + * Unload the given chunk + * + * @param chunk + * the chunk + * @return returns true if the chunk unloaded + */ + public static boolean unload(Chunk chunk) + { + return unload(chunk, true, true); + } + + /** + * Unload all given chunks + * + * @param chunks + * the chunks to unload + * @param save + * should these chunks be saved? + * @param safe + * should we ignore chunks with players nearby? + * @return the amount of chunks unloaded + */ + public static int unload(GList chunks, boolean save, boolean safe) + { + int unloaded = 0; + + for(Chunk i : chunks) + { + if(unload(i, save, safe)) + { + unloaded++; + } + } + + return unloaded; + } + + /** + * Unload all given chunks + * + * @param chunks + * the chunks to unload + * @param save + * should these chunks be saved? + * @return the amount of chunks unloaded + */ + public static int unload(GList chunks, boolean save) + { + return unload(chunks, save, true); + } + + /** + * Unload all given chunks + * + * @param chunks + * the chunks to unload + * @return the amount of chunks unloaded + */ + public static int unload(GList chunks) + { + return unload(chunks, true, true); + } + + /** + * Is the given chunk loaded? + * + * @param world + * the world + * @param x + * the x + * @param z + * the z + * @return true if it is + */ + public static boolean isLoaded(String world, int x, int z) + { + return isLoaded(Worlds.getWorld(world), x, z); + } + + /** + * Is the given chunk loaded? + * + * @param world + * the world + * @param x + * the x + * @param z + * the z + * @return true if it is + */ + public static boolean isLoaded(World world, int x, int z) + { + for(Chunk i : getLoadedChunks(world)) + { + if(i.getX() == x && i.getZ() == z) + { + return true; + } + } + + return false; + } + + /** + * Load all chunks + * + * @param chunks + * the chunks + */ + public static void load(GList chunks) + { + for(Chunk i : chunks) + { + i.load(); + } + } +} diff --git a/src/main/java/phantom/world/Worlds.java b/src/main/java/phantom/world/Worlds.java new file mode 100644 index 000000000..43bfc67f7 --- /dev/null +++ b/src/main/java/phantom/world/Worlds.java @@ -0,0 +1,48 @@ +package phantom.world; + +import org.bukkit.Bukkit; +import org.bukkit.World; + +import phantom.lang.GList; + +/** + * World utils + * + * @author cyberpwn + */ +public class Worlds +{ + /** + * Get all worlds + * + * @return the worlds + */ + public static GList getWorlds() + { + return new GList(Bukkit.getWorlds()); + } + + /** + * Does the world by the given name exist? + * + * @param world + * the world name + * @return true if it does + */ + public static boolean hasWorld(String world) + { + return getWorld(world) != null; + } + + /** + * Get a world + * + * @param world + * the world name + * @return the world or null + */ + public static World getWorld(String world) + { + return Bukkit.getWorld(world); + } +}